diff --git a/build.gradle b/build.gradle index c490715..41b2292 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.1.1' classpath 'com.novoda:bintray-release:0.7.0' // NOTE: Do not place your application dependencies here; they belong @@ -16,8 +16,8 @@ buildscript { allprojects { ext { - compileSdkVersion = 26 - buildToolVersion = '26.0.2' + compileSdkVersion = 27 + buildToolVersion = '27.0.3' minSdkVersion = 14 //publish @@ -43,7 +43,7 @@ allprojects { kotlinAndroidExtensions = "org.jetbrains.kotlin:kotlin-android-extensions:$kotlinVersion" //android - supportVersion = '26.1.0' + supportVersion = '27.1.1' androidSupportAnnotation = "com.android.support:support-annotations:$supportVersion" androidSupportV4 = "com.android.support:support-v4:$supportVersion" androidAppCompatV7 = "com.android.support:appcompat-v7:$supportVersion" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f16d266..c810bd4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Fri Apr 20 12:48:16 ICT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip diff --git a/reactiveandroid-appcompat-v7/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/activity/RecyclerViewTestActivity.kt b/reactiveandroid-appcompat-v7/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/activity/RecyclerViewTestActivity.kt index a14f7da..163e6ae 100644 --- a/reactiveandroid-appcompat-v7/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/activity/RecyclerViewTestActivity.kt +++ b/reactiveandroid-appcompat-v7/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/activity/RecyclerViewTestActivity.kt @@ -56,7 +56,7 @@ class RecyclerViewTestActivity : Activity() { override fun getItemCount(): Int = 1 - override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder = + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder = object : RecyclerView.ViewHolder(child) {} override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { diff --git a/reactiveandroid-appcompat-v7/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/widget/RecyclerViewTest.kt b/reactiveandroid-appcompat-v7/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/widget/RecyclerViewTest.kt index e89386f..973e38e 100644 --- a/reactiveandroid-appcompat-v7/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/widget/RecyclerViewTest.kt +++ b/reactiveandroid-appcompat-v7/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/widget/RecyclerViewTest.kt @@ -162,12 +162,12 @@ class RecyclerViewTest { fun adapter() { val expected = object : RecyclerView.Adapter() { - override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) { + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { } override fun getItemCount(): Int = 1 - override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder = + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder = object : RecyclerView.ViewHolder(View(instrumentation.context)) {} } diff --git a/reactiveandroid-appcompat-v7/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/widget/RecyclerViewExt.kt b/reactiveandroid-appcompat-v7/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/widget/RecyclerViewExt.kt index 7c4cab3..0c3026d 100644 --- a/reactiveandroid-appcompat-v7/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/widget/RecyclerViewExt.kt +++ b/reactiveandroid-appcompat-v7/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v7/reactive/widget/RecyclerViewExt.kt @@ -23,7 +23,7 @@ abstract class RecyclerViewProxyAdapter : Recyc fun getItem(position: Int) = items[position] operator fun get(position: Int) = items[position] - override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): VH = createViewHolder.invoke(parent, viewType) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH = createViewHolder.invoke(parent, viewType) override fun onBindViewHolder(viewHolder: VH, position: Int) { bindViewHolder.invoke(viewHolder, position, items[position]) diff --git a/reactiveandroid-appcompat-v7/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v7/widget/SectionedRecyclerViewExtension.kt b/reactiveandroid-appcompat-v7/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v7/widget/SectionedRecyclerViewExtension.kt index 2c9e52f..4a7d869 100644 --- a/reactiveandroid-appcompat-v7/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v7/widget/SectionedRecyclerViewExtension.kt +++ b/reactiveandroid-appcompat-v7/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v7/widget/SectionedRecyclerViewExtension.kt @@ -16,11 +16,11 @@ interface SectionModelType { class SimpleSection(val name: String, override var items: List) : SectionModelType -fun List.mapToSection(sectionName: (T) -> X): List> = groupBy { sectionName(it) }.mapTo(mutableListOf()) { +fun List.mapToSection(sectionName: (T) -> X): List> = groupBy { sectionName(it) }.mapTo(mutableListOf()) { SimpleSection(it.key.toString(), it.value) } -fun Observable>.mapToSection(sectionName: (T) -> X): Observable>> = map { it.mapToSection(sectionName) } +fun Observable>.mapToSection(sectionName: (T) -> X): Observable>> = map { it.mapToSection(sectionName) } val SECTION_HEADER_VIEW_TYPE = 1000 val SECTION_ITEM_VIEW_TYPE = 1001 @@ -66,7 +66,7 @@ abstract class SectionedRecyclerViewProxyAdapter, VH //add upperbound to support last item _headerPositions.add(Int.MAX_VALUE) - for (index in 0.._headerPositions.size - 1) { + for (index in 0 until _headerPositions.size) { val headerPosition = _headerPositions[index] if (headerPosition > position) { val previousIndex = index - 1 @@ -79,7 +79,7 @@ abstract class SectionedRecyclerViewProxyAdapter, VH return null } - override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): VH = createViewHolder.invoke(parent, viewType) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH = createViewHolder.invoke(parent, viewType) } diff --git a/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/DrawerLayoutEvent.kt b/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/DrawerLayoutEvent.kt index 8220e5a..16df442 100644 --- a/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/DrawerLayoutEvent.kt +++ b/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/DrawerLayoutEvent.kt @@ -77,7 +77,7 @@ internal class _DrawerLayout_DrawerListener : DrawerLayout.DrawerListener { onDrawerClosed = listener } - override fun onDrawerClosed(drawerView: View?) { + override fun onDrawerClosed(drawerView: View) { onDrawerClosed?.invoke(drawerView) } @@ -93,7 +93,7 @@ internal class _DrawerLayout_DrawerListener : DrawerLayout.DrawerListener { onDrawerSlide = listener } - override fun onDrawerSlide(drawerView: View?, slideOffset: Float) { + override fun onDrawerSlide(drawerView: View, slideOffset: Float) { onDrawerSlide?.invoke(drawerView, slideOffset) } @@ -101,7 +101,7 @@ internal class _DrawerLayout_DrawerListener : DrawerLayout.DrawerListener { onDrawerOpened = listener } - override fun onDrawerOpened(drawerView: View?) { + override fun onDrawerOpened(drawerView: View) { onDrawerOpened?.invoke(drawerView) } diff --git a/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/DrawerLayoutProperty.kt b/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/DrawerLayoutProperty.kt index b6893c4..080fb2b 100644 --- a/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/DrawerLayoutProperty.kt +++ b/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/DrawerLayoutProperty.kt @@ -17,10 +17,10 @@ val DrawerLayout.rx_drawerElevation: MutableProperty return createMainThreadMutableProperty(getter, setter) } -val DrawerLayout.rx_statusBarBackground: MutableProperty +val DrawerLayout.rx_statusBarBackground: MutableProperty get() { val getter = { statusBarBackgroundDrawable } - val setter: (Drawable) -> Unit = { setStatusBarBackground(it) } + val setter: (Drawable?) -> Unit = { setStatusBarBackground(it) } return createMainThreadMutableProperty(getter, setter) } diff --git a/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/SlidingPaneLayoutEvent.kt b/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/SlidingPaneLayoutEvent.kt index 9449c61..1090f57 100644 --- a/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/SlidingPaneLayoutEvent.kt +++ b/reactiveandroid-support-v4/src/main/kotlin/com/github/kittinunf/reactiveandroid/support/v4/widget/SlidingPaneLayoutEvent.kt @@ -63,7 +63,7 @@ internal class _SlidingPaneLayout_PanelSlideListener : SlidingPaneLayout.PanelSl onPanelSlide = listener } - override fun onPanelSlide(panel: View?, slideOffset: Float) { + override fun onPanelSlide(panel: View, slideOffset: Float) { onPanelSlide?.invoke(panel, slideOffset) } @@ -71,7 +71,7 @@ internal class _SlidingPaneLayout_PanelSlideListener : SlidingPaneLayout.PanelSl onPanelClosed = listener } - override fun onPanelClosed(panel: View?) { + override fun onPanelClosed(panel: View) { onPanelClosed?.invoke(panel) } @@ -79,7 +79,7 @@ internal class _SlidingPaneLayout_PanelSlideListener : SlidingPaneLayout.PanelSl onPanelOpened = listener } - override fun onPanelOpened(panel: View?) { + override fun onPanelOpened(panel: View) { onPanelOpened?.invoke(panel) } diff --git a/reactiveandroid/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/FlowableExtension.kt b/reactiveandroid/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/FlowableExtension.kt new file mode 100644 index 0000000..38c2aa3 --- /dev/null +++ b/reactiveandroid/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/FlowableExtension.kt @@ -0,0 +1,18 @@ +package com.github.kittinunf.reactiveandroid.reactive + +import com.github.kittinunf.reactiveandroid.MutablePropertyType +import io.reactivex.Flowable +import io.reactivex.disposables.Disposable + +fun Flowable.bindTo(property: MutablePropertyType): Disposable { + return subscribe { + property.value = it + } +} + +fun Flowable.cachedPrevious(): Flowable> { + return scan(Pair(null, null)) { (_, j), item -> j to item } + .skip(1) +} + +inline fun Flowable.ofType() = ofType(T::class.java) \ No newline at end of file diff --git a/reactiveandroid/src/test/kotlin/com/github/kittinunf/reactiveandroid/FlowableExtension.kt b/reactiveandroid/src/test/kotlin/com/github/kittinunf/reactiveandroid/FlowableExtension.kt new file mode 100644 index 0000000..4310238 --- /dev/null +++ b/reactiveandroid/src/test/kotlin/com/github/kittinunf/reactiveandroid/FlowableExtension.kt @@ -0,0 +1,46 @@ +package com.github.kittinunf.reactiveandroid + +import com.github.kittinunf.reactiveandroid.reactive.cachedPrevious +import io.reactivex.Flowable +import org.hamcrest.CoreMatchers +import org.junit.Assert +import org.junit.Test + +class FlowableExtension { + + @Test + fun cachedPreviousWithInt() { + val ints = Flowable.just(1, 2, 3, 4) + val test = ints.cachedPrevious().test() + + Assert.assertThat(test.valueCount(), CoreMatchers.equalTo(4)) + val values = test.values() + Assert.assertThat(values[0].second, CoreMatchers.equalTo(1)) + Assert.assertThat(values[1] as Pair, CoreMatchers.equalTo(1 to 2)) + Assert.assertThat(values[2] as Pair, CoreMatchers.equalTo(2 to 3)) + Assert.assertThat(values[3] as Pair, CoreMatchers.equalTo(3 to 4)) + } + + @Test + fun cachedPreviousWithList() { + val lists = Flowable.just(emptyList(), listOf(1, 2, 3), listOf(1, 2, 3, 4, 5)) + + val test = lists.cachedPrevious().test() + + Assert.assertThat(test.valueCount(), CoreMatchers.equalTo(3)) + + val values = test.values() + Assert.assertThat(values[0].second, CoreMatchers.equalTo(emptyList())) + Assert.assertThat(values[1] as Pair, List>, CoreMatchers.equalTo(emptyList() to listOf(1, 2, 3))) + Assert.assertThat(values[2] as Pair, List>, CoreMatchers.equalTo(listOf(1, 2, 3) to listOf(1, 2, 3, 4, 5))) + } + + @Test + fun cachedPreviousWithListOneItem() { + val list = Flowable.just(listOf(1, 2, 3)) + + val test = list.cachedPrevious().test() + + Assert.assertThat(test.valueCount(), CoreMatchers.equalTo(1)) + } +} \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index 78f0cdc..9d73ef2 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -11,6 +11,8 @@ android { minSdkVersion parent.ext.minSdkVersion targetSdkVersion parent.ext.compileSdkVersion versionCode 1 + + multiDexEnabled true } sourceSets { @@ -40,14 +42,17 @@ android { } dependencies { - compile parent.ext.kotlinStdLib - compile parent.ext.androidAppCompatV7 - - compile project(':reactiveandroid-ui') - compile project(':reactiveandroid-appcompat-v7') - compile project(':reactiveandroid-support-v4') - compile project(':reactiveandroid-design') - compile 'com.android.support.constraint:constraint-layout:1.0.2' + implementation parent.ext.kotlinStdLib + implementation parent.ext.androidSupportV4 + implementation parent.ext.androidAppCompatV7 + implementation parent.ext.androidSupportAnnotation + + implementation project(':reactiveandroid-ui') + implementation project(':reactiveandroid-appcompat-v7') + implementation project(':reactiveandroid-support-v4') + implementation project(':reactiveandroid-design') + implementation 'com.android.support.constraint:constraint-layout:1.1.0' + implementation 'com.android.support:multidex:1.0.3' } buildscript { @@ -59,5 +64,4 @@ buildscript { classpath parent.ext.kotlinGradlePlugin classpath parent.ext.kotlinAndroidExtensions } -} - +} \ No newline at end of file diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index e8c9f5f..42f890a 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -1,41 +1,33 @@ + package="com.github.kittinunf.reactiveandroid.sample"> - + android:theme="@style/AppTheme"> + - + - + - + - - + + diff --git a/sample/src/main/kotlin/com.github.kittinunf.reactiveandroid.sample/fragment/PlaceholderFragment.kt b/sample/src/main/kotlin/com.github.kittinunf.reactiveandroid.sample/fragment/PlaceholderFragment.kt index 978ddb7..f6ca6b3 100644 --- a/sample/src/main/kotlin/com.github.kittinunf.reactiveandroid.sample/fragment/PlaceholderFragment.kt +++ b/sample/src/main/kotlin/com.github.kittinunf.reactiveandroid.sample/fragment/PlaceholderFragment.kt @@ -14,9 +14,9 @@ class PlaceholderFragment : Fragment() { return inflater.inflate(R.layout.fragment_place_holder, container, false) } - override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - tvName.text = arguments.getString(ARG_SECTION_NAME, "") + tvName.text = arguments?.getString(ARG_SECTION_NAME, "") } companion object { diff --git a/sample/src/main/kotlin/com.github.kittinunf.reactiveandroid.sample/fragment/ViewPagerFragment.kt b/sample/src/main/kotlin/com.github.kittinunf.reactiveandroid.sample/fragment/ViewPagerFragment.kt index 1665827..d0bb644 100644 --- a/sample/src/main/kotlin/com.github.kittinunf.reactiveandroid.sample/fragment/ViewPagerFragment.kt +++ b/sample/src/main/kotlin/com.github.kittinunf.reactiveandroid.sample/fragment/ViewPagerFragment.kt @@ -24,10 +24,10 @@ class ViewPagerFragment : Fragment() { return inflater.inflate(R.layout.fragment_view_pager, container, false) } - override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - viewPager.rx_fragmentsStateWith(Observable.just(listOf("section1", "section2", "section3")), fragmentManager, + viewPager.rx_fragmentsStateWith(Observable.just(listOf("section1", "section2", "section3")), fragmentManager!!, { position, item -> PlaceholderFragment.newInstance(item) },