diff options
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | adapter/src/main/kotlin/ca/allanwang/kau/adapters/AdapterUtils.kt | 22 | ||||
-rw-r--r-- | adapter/src/main/kotlin/ca/allanwang/kau/adapters/ChainedAdapters.kt | 85 | ||||
-rw-r--r-- | adapter/src/main/kotlin/ca/allanwang/kau/adapters/FastItemThemedAdapter.kt | 11 | ||||
-rw-r--r-- | adapter/src/main/kotlin/ca/allanwang/kau/adapters/SectionAdapter.kt | 13 | ||||
-rw-r--r-- | core/src/test/kotlin/ca/allanwang/kau/kotlin/DebounceTest.kt | 10 | ||||
-rw-r--r-- | docs/Changelog.md | 8 | ||||
-rw-r--r-- | gradle.properties | 18 | ||||
-rw-r--r-- | mediapicker/src/main/kotlin/ca/allanwang/kau/mediapicker/MediaPickerCore.kt | 13 | ||||
-rw-r--r-- | sample/src/main/res/xml/kau_changelog.xml | 11 |
10 files changed, 64 insertions, 130 deletions
@@ -156,8 +156,9 @@ Special thanks to the following awesome people for translating significant porti | Language | Contributors | |----------|--------------| | French | [Vincent Kulak](https://github.com/VonOx) • [Jean-Philippe Gravel](https://crowdin.com/profile/wokija) | -| German | [Bushido1992](https://forum.xda-developers.com/member.php?u=5179246) • [msoehnchen](https://crowdin.com/profile/msoehnchen) • [3LD0mi HA](https://forum.xda-developers.com/member.php?u=5860523) | +| German | [Bushido1992](https://forum.xda-developers.com/member.php?u=5179246) • [Marcel Soehnchen](https://crowdin.com/profile/msoehnchen) • [3LD0mi HA](https://forum.xda-developers.com/member.php?u=5860523) | | Korean | [잇스테이크](https://crowdin.com/profile/bexco2010) | +| Italian | | | Spanish | [Jahir Fiquitiva](https://jahirfiquitiva.me/) • [Nefi Salazar](https://plus.google.com/u/0/105547968033551087431)| | Vietnamese | [Alienz](https://crowdin.com/profile/alienyd) | diff --git a/adapter/src/main/kotlin/ca/allanwang/kau/adapters/AdapterUtils.kt b/adapter/src/main/kotlin/ca/allanwang/kau/adapters/AdapterUtils.kt new file mode 100644 index 0000000..206c66b --- /dev/null +++ b/adapter/src/main/kotlin/ca/allanwang/kau/adapters/AdapterUtils.kt @@ -0,0 +1,22 @@ +package ca.allanwang.kau.adapters + +import com.mikepenz.fastadapter.FastAdapter +import com.mikepenz.fastadapter.IAdapter +import com.mikepenz.fastadapter.IItem +import com.mikepenz.fastadapter.commons.adapters.FastItemAdapter + +/** + * Created by Allan Wang on 2017-11-08. + */ + +/** + * Add kotlin's generic syntax to better support out types + */ +fun <T : IItem<*, *>> fastAdapter(vararg adapter: IAdapter<out T>) = + FastAdapter.with<T, IAdapter<out T>>(adapter.toList())!! + +/** + * Helper to get an [IAdapter] directly from a [FastItemAdapter] + */ +fun <T : IItem<*, *>> fastAdapter(adapter: IAdapter<out T>, fastAdapter: FastItemAdapter<out T>) = + fastAdapter(adapter, fastAdapter.itemAdapter)
\ No newline at end of file diff --git a/adapter/src/main/kotlin/ca/allanwang/kau/adapters/ChainedAdapters.kt b/adapter/src/main/kotlin/ca/allanwang/kau/adapters/ChainedAdapters.kt deleted file mode 100644 index 2da0cac..0000000 --- a/adapter/src/main/kotlin/ca/allanwang/kau/adapters/ChainedAdapters.kt +++ /dev/null @@ -1,85 +0,0 @@ -package ca.allanwang.kau.adapters - -import android.support.v7.widget.LinearLayoutManager -import android.support.v7.widget.RecyclerView -import ca.allanwang.kau.utils.withLinearAdapter -import com.mikepenz.fastadapter.IItem -import com.mikepenz.fastadapter.adapters.HeaderAdapter -import com.mikepenz.fastadapter.commons.adapters.FastItemAdapter -import org.jetbrains.anko.collections.forEachReversedWithIndex -import java.util.* - -/** - * Created by Allan Wang on 2017-06-27. - * - * Once bounded to a [RecyclerView], this will - * - Chain together a list of [HeaderAdapter]s, backed by a generic [FastItemAdapter] - * - Add a [LinearLayoutManager] to the recycler - * - Add a listener for when a new adapter segment is being used - */ -class ChainedAdapters<T>(vararg items: Pair<T, SectionAdapter<*>>) { - private val chain: MutableList<Pair<T, SectionAdapter<*>>> = mutableListOf(*items) - val baseAdapter: FastItemAdapter<IItem<*, *>> = FastItemAdapter() - private val indexStack = Stack<Int>() - var recycler: RecyclerView? = null - val firstVisibleItemPosition: Int - get() = (recycler?.layoutManager as LinearLayoutManager?)?.findFirstVisibleItemPosition() ?: throw IllegalArgumentException("No recyclerview was bounded to the chain adapters") - - fun add(vararg items: Pair<T, SectionAdapter<*>>) = add(items.toList()) - - fun add(items: Collection<Pair<T, SectionAdapter<*>>>): ChainedAdapters<T> { - if (recycler != null) throw IllegalAccessException("Chain adapter is already bounded to a recycler; cannot add directly.") - items.map { it.second }.forEachIndexed { index, sectionAdapter -> sectionAdapter.sectionOrder = chain.size + 1 + index } - chain.addAll(items) - return this - } - - operator fun get(index: Int) = chain[index] - - /** - * Attaches the chain to a recycler - * After this stage, any modifications to the adapters must be done through external references - * You may still get the generic header adapters through the get operator - * Binding the recycler also involves supplying a callback, which returns - * the item (T) associated with the adapter, - * the index (Int) of the current adapter - * and the dy (Int) as given by the scroll listener - */ - fun bindRecyclerView(recyclerView: RecyclerView, onAdapterSectionChanged: (item: T, index: Int, dy: Int) -> Unit) { - if (recycler != null) throw IllegalStateException("Chain adapter is already bounded") - if (chain.isEmpty()) throw IllegalArgumentException("No adapters have been added to the adapters list") - //wrap adapters - chain.map { it.second }.forEachReversedWithIndex { i, headerAdapter -> - if (i == chain.size - 1) headerAdapter.wrap(baseAdapter) - else headerAdapter.wrap(chain[i + 1].second) - } - recycler = recyclerView - indexStack.push(0) - with(recyclerView) { - withLinearAdapter(chain.first().second) - addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(rv: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(rv, dx, dy) - val topPosition = firstVisibleItemPosition - val currentAdapterIndex = indexStack.peek() - if (dy > 0) { - //look ahead from current adapter - val nextAdapterIndex = (currentAdapterIndex until chain.size).asSequence() - .firstOrNull { - val adapter = chain[it].second - adapter.adapterItemCount > 0 && adapter.getGlobalPosition(adapter.adapterItemCount - 1) >= topPosition - } ?: currentAdapterIndex - if (nextAdapterIndex == currentAdapterIndex) return - indexStack.push(nextAdapterIndex) - onAdapterSectionChanged(chain[indexStack.peek()].first, indexStack.peek(), dy) - } else if (currentAdapterIndex == 0) { - return //All adapters may be empty; in this case, if we are already at the beginning, don't bother checking - } else if (chain[currentAdapterIndex].second.getGlobalPosition(0) > topPosition) { - indexStack.pop() - onAdapterSectionChanged(chain[indexStack.peek()].first, indexStack.peek(), dy) - } - } - }) - } - } -}
\ No newline at end of file diff --git a/adapter/src/main/kotlin/ca/allanwang/kau/adapters/FastItemThemedAdapter.kt b/adapter/src/main/kotlin/ca/allanwang/kau/adapters/FastItemThemedAdapter.kt index b1c281a..c3a1c61 100644 --- a/adapter/src/main/kotlin/ca/allanwang/kau/adapters/FastItemThemedAdapter.kt +++ b/adapter/src/main/kotlin/ca/allanwang/kau/adapters/FastItemThemedAdapter.kt @@ -8,9 +8,7 @@ import android.widget.ImageView import android.widget.TextView import ca.allanwang.kau.ui.createSimpleRippleDrawable import ca.allanwang.kau.utils.adjustAlpha -import com.mikepenz.fastadapter.IExpandable import com.mikepenz.fastadapter.IItem -import com.mikepenz.fastadapter.ISubItem import com.mikepenz.fastadapter.commons.adapters.FastItemAdapter /** @@ -100,16 +98,11 @@ class FastItemThemedAdapter<Item : IItem<*, *>>( return super.setNewList(items) } - override fun <T, S> setSubItems(collapsible: T, subItems: List<S>?): T where S : IItem<*, *>?, T : IItem<*, *>?, T : IExpandable<T, S>?, S : ISubItem<Item, T>? { - injectTheme(subItems) - return super.setSubItems(collapsible, subItems) - } - - internal fun injectTheme(items: Collection<IItem<*, *>?>?) { + private fun injectTheme(items: Collection<IItem<*, *>?>?) { items?.forEach { injectTheme(it) } } - internal fun injectTheme(item: IItem<*, *>?) { + protected fun injectTheme(item: IItem<*, *>?) { if (item is ThemableIItem && item.themeEnabled) { item.textColor = textColor item.backgroundColor = backgroundColor diff --git a/adapter/src/main/kotlin/ca/allanwang/kau/adapters/SectionAdapter.kt b/adapter/src/main/kotlin/ca/allanwang/kau/adapters/SectionAdapter.kt deleted file mode 100644 index cf7205a..0000000 --- a/adapter/src/main/kotlin/ca/allanwang/kau/adapters/SectionAdapter.kt +++ /dev/null @@ -1,13 +0,0 @@ -package ca.allanwang.kau.adapters - -import com.mikepenz.fastadapter.IItem -import com.mikepenz.fastadapter.adapters.HeaderAdapter - -/** - * Created by Allan Wang on 2017-06-27. - * - * Extension of [HeaderAdapter] where we can define the order - */ -class SectionAdapter<Item : IItem<*, *>>(var sectionOrder: Int = 100) : HeaderAdapter<Item>() { - override fun getOrder(): Int = sectionOrder -}
\ No newline at end of file diff --git a/core/src/test/kotlin/ca/allanwang/kau/kotlin/DebounceTest.kt b/core/src/test/kotlin/ca/allanwang/kau/kotlin/DebounceTest.kt index 05345bd..8ccdab3 100644 --- a/core/src/test/kotlin/ca/allanwang/kau/kotlin/DebounceTest.kt +++ b/core/src/test/kotlin/ca/allanwang/kau/kotlin/DebounceTest.kt @@ -34,18 +34,18 @@ class DebounceTest { @Test fun multipleDebounces() { var i = 0 - val debounce = debounce<Int>(10) { i += it } + val debounce = debounce<Int>(20) { i += it } debounce(1) //ignore -> i = 0 - Thread.sleep(5) + Thread.sleep(10) assertEquals(0, i) debounce(2) //accept -> i = 2 - Thread.sleep(15) + Thread.sleep(30) assertEquals(2, i) debounce(4) //ignore -> i = 2 - Thread.sleep(5) + Thread.sleep(10) assertEquals(2, i) debounce(8) //accept -> i = 10 - Thread.sleep(15) + Thread.sleep(30) assertEquals(10, i) } diff --git a/docs/Changelog.md b/docs/Changelog.md index f13f21b..45b8e12 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -1,5 +1,13 @@ # Changelog +## v3.5.0 +* Update dependencies, many of which with major version increments +* Add Vietnamese translations +* Add Italian translations +* Clean up unnecessary build version support +* Optimize and refactor old code +* Add helper methods to enhance FastAdapter for Kotlin + ## v3.4.5 * Add French translations * Add Spanish translations diff --git a/gradle.properties b/gradle.properties index 3003784..4f368a8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,19 +23,19 @@ TARGET_SDK=26 BUILD_TOOLS=26.0.2 ANDROID_SUPPORT_LIBS=27.0.0 -VERSION_NAME=3.4.4.1 +VERSION_NAME=3.5.0.0 KOTLIN=1.1.51 -ABOUT_LIBRARIES=5.9.7 -ANKO=0.10.1 +ABOUT_LIBRARIES=6.0.0 +ANKO=0.10.2 BLURRY=2.1.1 CONSTRAINT_LAYOUT=1.1.0-beta3 -FAST_ADAPTER=2.6.3 -FAST_ADAPTER_COMMONS=2.6.3 -GLIDE=4.2.0 -ICONICS=2.9.3 -IICON_GOOGLE=3.0.1.1 -MATERIAL_DIALOG=0.9.4.7 +FAST_ADAPTER=3.0.1 +FAST_ADAPTER_COMMONS=3.0.1 +GLIDE=4.3.1 +ICONICS=2.9.5 +IICON_GOOGLE=3.0.1.2 +MATERIAL_DIALOG=0.9.5.0 ESPRESSO=3.0.0 JUNIT=4.12 diff --git a/mediapicker/src/main/kotlin/ca/allanwang/kau/mediapicker/MediaPickerCore.kt b/mediapicker/src/main/kotlin/ca/allanwang/kau/mediapicker/MediaPickerCore.kt index ec5d2f0..9bab4c4 100644 --- a/mediapicker/src/main/kotlin/ca/allanwang/kau/mediapicker/MediaPickerCore.kt +++ b/mediapicker/src/main/kotlin/ca/allanwang/kau/mediapicker/MediaPickerCore.kt @@ -18,6 +18,7 @@ import android.support.v4.content.CursorLoader import android.support.v4.content.Loader import android.support.v7.widget.GridLayoutManager import android.support.v7.widget.RecyclerView +import ca.allanwang.kau.adapters.fastAdapter import ca.allanwang.kau.animators.FadeScaleAnimatorAdd import ca.allanwang.kau.animators.KauAnimator import ca.allanwang.kau.internal.KauBaseActivity @@ -29,7 +30,7 @@ import ca.allanwang.kau.utils.toast import com.bumptech.glide.Glide import com.bumptech.glide.RequestManager import com.mikepenz.fastadapter.IItem -import com.mikepenz.fastadapter.adapters.HeaderAdapter +import com.mikepenz.fastadapter.adapters.ItemAdapter import com.mikepenz.fastadapter.commons.adapters.FastItemAdapter import com.mikepenz.google_material_typeface_library.GoogleMaterial import com.mikepenz.iconics.IconicsDrawable @@ -108,7 +109,7 @@ abstract class MediaPickerCore<T : IItem<*, *>>( private var hasPreloaded = false private var prefetcher: Future<*>? = null - val adapter: FastItemAdapter<T> = FastItemAdapter() + val adapter = FastItemAdapter<T>() /** * Further improve preloading by extending the layout space @@ -121,9 +122,9 @@ abstract class MediaPickerCore<T : IItem<*, *>>( } fun initializeRecycler(recycler: RecyclerView) { - val adapterWrapper = HeaderAdapter<MediaActionItem>() - adapterWrapper.wrap(adapter) - adapterWrapper.add(mediaActions.map { MediaActionItem(it, mediaType) }) + val adapterHeader = ItemAdapter<MediaActionItem>() + val fulladapter = fastAdapter(adapterHeader, adapter) + adapterHeader.add(mediaActions.map { MediaActionItem(it, mediaType) }) recycler.apply { val manager = object : GridLayoutManager(context, computeColumnCount(context)) { override fun getExtraLayoutSpace(state: RecyclerView.State?): Int { @@ -133,7 +134,7 @@ abstract class MediaPickerCore<T : IItem<*, *>>( setItemViewCacheSize(CACHE_SIZE) isDrawingCacheEnabled = true layoutManager = manager - adapter = adapterWrapper + adapter = fulladapter setHasFixedSize(true) itemAnimator = KauAnimator(FadeScaleAnimatorAdd(0.8f)) } diff --git a/sample/src/main/res/xml/kau_changelog.xml b/sample/src/main/res/xml/kau_changelog.xml index b964cb6..4718e09 100644 --- a/sample/src/main/res/xml/kau_changelog.xml +++ b/sample/src/main/res/xml/kau_changelog.xml @@ -6,13 +6,20 @@ <item text="" /> --> + <version title="v3.5.0" /> + <item text="Update dependencies, many of which with major version increments" /> + <item text="Add Vietnamese translations" /> + <item text="Add Italian translations" /> + <item text="Clean up unnecessary build version support" /> + <item text="Optimize and refactor old code" /> + <item text="Add helper methods to enhance FastAdapter for Kotlin" /> + <item text="" /> + <version title="v3.4.5" /> <item text="Add French translations" /> <item text="Add Spanish translations" /> <item text="Add German translations" /> <item text="Remove unnecessary strings" /> - <item text="" /> - <item text="" /> <version title="v3.4.4" /> <item text="Add translation support for crowdin" /> |