Browse Source

- 增加轮询器: Interval
- 比RxJava增加 开始|停止|暂停|继续 功能, 应对任何计时功能

drake 5 years ago
parent
commit
4ee2c2b92d

+ 20 - 1
README.md

@@ -54,7 +54,7 @@ allprojects {
 module 的 build.gradle
 
 ```groovy
-implementation 'com.github.liangjingkanji:Net:1.2.7'
+implementation 'com.github.liangjingkanji:Net:1.2.8'
 ```
 
 
@@ -492,3 +492,22 @@ abstract class DefaultConverter(
 
 
 
+## 轮循器
+
+本框架附带一个轮循器`Interval`
+
+- 支持多个观察者订阅同一个计时器
+- 开始(即subscribe订阅) | 暂停 | 继续 | 停止
+- 同时包含RxJava的操作符`interval|intervelRange`功能
+- 轮循器即Observable对象, 所以可以进行任意操作符转换. 例如轮循器控制网络请求
+
+
+
+函数
+
+```
+subscribe() // 即开启定时器, 订阅多个也会监听同一个计数器
+stop() // 结束
+pause() // 暂停
+resume() // 继续
+```

+ 1 - 1
net/build.gradle

@@ -41,7 +41,7 @@ dependencies {
     api 'com.yanzhenjie:okalle:0.1.7'
 
     compileOnly 'androidx.appcompat:appcompat:1.1.0'
-    compileOnly 'com.github.liangjingkanji:BRV:1.1.4'
+    compileOnly 'com.github.liangjingkanji:BRV:1.1.6'
     compileOnly 'com.github.bumptech.glide:glide:4.9.0'
 
     compileOnly 'io.reactivex.rxjava2:rxkotlin:2.3.0'

+ 37 - 4
net/src/main/java/com/drake/net/observer/ObservaleUtils.kt → net/src/main/java/com/drake/net/observer/ObservableUtils.kt

@@ -13,11 +13,8 @@ import io.reactivex.Observable
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.schedulers.Schedulers
 
-// <editor-fold desc="线程">
+// <editor-fold desc="被观察者线程">
 
-fun <M> Observable<M>.async(): Observable<M> {
-    return subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
-}
 
 fun <M> Observable<M>.computation(): Observable<M> {
     return subscribeOn(Schedulers.computation())
@@ -36,15 +33,51 @@ fun <M> Observable<M>.newThread(): Observable<M> {
 }
 
 fun <M> Observable<M>.main(): Observable<M> {
+    return subscribeOn(AndroidSchedulers.mainThread())
+}
+
+
+// </editor-fold>
+
+
+// <editor-fold desc="观察者线程">
+
+fun <M> Observable<M>.observeMain(): Observable<M> {
     return observeOn(AndroidSchedulers.mainThread())
 }
 
+fun <M> Observable<M>.observeSingle(): Observable<M> {
+    return observeOn(Schedulers.single())
+}
+
+fun <M> Observable<M>.observeIO(): Observable<M> {
+    return observeOn(Schedulers.io())
+}
+
+fun <M> Observable<M>.observeThread(): Observable<M> {
+    return observeOn(Schedulers.newThread())
+}
+
+fun <M> Observable<M>.observeComputation(): Observable<M> {
+    return observeOn(Schedulers.computation())
+}
+
 // </editor-fold>
 
+
 fun runMain(block: () -> Unit) {
     if (Looper.myLooper() == Looper.getMainLooper()) {
         block()
     } else {
         Handler(Looper.getMainLooper()).post { block() }
     }
+}
+
+
+fun <M> Observable<M>.async(): Observable<M> {
+    return subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+}
+
+fun <M> from(block: () -> M): Observable<M> {
+    return Observable.fromCallable(block)
 }

+ 10 - 2
net/src/main/java/com/drake/net/observer/PageObserver.kt

@@ -62,10 +62,12 @@ abstract class PageObserver<M>(val page: PageRefreshLayout) : DisposableObserver
     }
 
     /**
-     * 自动判断是添加数据还是覆盖数据
+     * 自动判断是添加数据还是覆盖数据, 以及数据为空或者NULL时[showEmpty]
+     * @param hasMore 如果不穿数据, 默认已加载完全部(建议此时可以关闭[PageRefreshLayout]的加载更多功能)
      */
-    fun addData(data: List<Any>, hasMore: BindingAdapter.() -> Boolean) {
+    fun addData(data: List<Any>, hasMore: BindingAdapter.() -> Boolean = { false }) {
         page.addData(data, hasMore)
+        dispose()
     }
 
 
@@ -75,23 +77,29 @@ abstract class PageObserver<M>(val page: PageRefreshLayout) : DisposableObserver
      */
     fun showEmpty() {
         page.showEmpty()
+        dispose()
     }
 
     override fun onComplete() {
+        if (page.stateEnabled) page.showContent() else page.finish()
     }
 
     /**
      * 显示内容缺省页
+     * 默认情况会自动执行不需要手动调用
      */
     fun showContent() {
         page.showContent()
+        dispose()
     }
 
     /**
      * 结束刷新或者加载
+     * 默认情况会自动执行不需要手动调用
      * @param success 是否成功
      */
     fun finish(success: Boolean = true) {
         page.finish(success)
+        dispose()
     }
 }

+ 4 - 3
sample/build.gradle

@@ -23,6 +23,7 @@ android {
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
+
 }
 
 dependencies {
@@ -38,9 +39,9 @@ dependencies {
 
     implementation 'com.squareup.moshi:moshi-kotlin:1.8.0'
     kapt 'com.squareup.moshi:moshi-kotlin-codegen:1.8.0'
-    implementation 'com.github.liangjingkanji:BRV:1.1.2'
-    implementation  'com.scwang.smart:refresh-header-classics:2.0.0-alpha-1'
-    implementation  'com.scwang.smart:refresh-footer-classics:2.0.0-alpha-1'
+    implementation 'com.github.liangjingkanji:BRV:1.1.4'
+    implementation 'com.scwang.smart:refresh-header-classics:2.0.0-alpha-1'
+    implementation 'com.scwang.smart:refresh-footer-classics:2.0.0-alpha-1'
     implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
     implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'