From fa75d5e2e3c3069e00673f54754838d6290e56fe Mon Sep 17 00:00:00 2001
From: tangwanchao <18284228392@163.com>
Date: Thu, 22 Sep 2022 15:23:57 +0800
Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=88=86=E9=A1=B5=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E8=A7=82=E5=AF=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/gradle.xml | 1 +
observer/build.gradle | 2 +-
.../observer/engine/ISourceObserverView.kt | 5 ++
.../observer/widget/SourceObserverView.kt | 4 ++
paging/.gitignore | 1 +
paging/build.gradle | 71 +++++++++++++++++++
paging/consumer-rules.pro | 0
paging/proguard-rules.pro | 21 ++++++
.../paging/ExampleInstrumentedTest.kt | 24 +++++++
paging/src/main/AndroidManifest.xml | 5 ++
.../twc/source/observer/paging/IPagination.kt | 20 ++++++
.../source/observer/paging/ObserverUtil.kt | 64 +++++++++++++++++
.../source/observer/paging/ExampleUnitTest.kt | 17 +++++
settings.gradle | 1 +
source/build.gradle | 2 +-
15 files changed, 236 insertions(+), 2 deletions(-)
create mode 100644 paging/.gitignore
create mode 100644 paging/build.gradle
create mode 100644 paging/consumer-rules.pro
create mode 100644 paging/proguard-rules.pro
create mode 100644 paging/src/androidTest/java/me/twc/source/observer/paging/ExampleInstrumentedTest.kt
create mode 100644 paging/src/main/AndroidManifest.xml
create mode 100644 paging/src/main/java/me/twc/source/observer/paging/IPagination.kt
create mode 100644 paging/src/main/java/me/twc/source/observer/paging/ObserverUtil.kt
create mode 100644 paging/src/test/java/me/twc/source/observer/paging/ExampleUnitTest.kt
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 66f66ad..51880d4 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -14,6 +14,7 @@
+
diff --git a/observer/build.gradle b/observer/build.gradle
index 2769148..b3ad552 100644
--- a/observer/build.gradle
+++ b/observer/build.gradle
@@ -50,7 +50,7 @@ afterEvaluate {
// You can then customize attributes of the publication as shown below.
groupId = 'com.github.tangwanchao'
artifactId = 'source-observer'
- version = '1.1.4'
+ version = '2.0.0'
}
}
}
diff --git a/observer/src/main/java/me/twc/source/observer/engine/ISourceObserverView.kt b/observer/src/main/java/me/twc/source/observer/engine/ISourceObserverView.kt
index dee0386..8cb8096 100644
--- a/observer/src/main/java/me/twc/source/observer/engine/ISourceObserverView.kt
+++ b/observer/src/main/java/me/twc/source/observer/engine/ISourceObserverView.kt
@@ -18,6 +18,11 @@ interface ISourceObserverView {
*/
fun showSourceErrorView()
+ /**
+ * 展示空数据 ui
+ */
+ fun showSourceEmptyView()
+
/**
* 展示成功 ui
*/
diff --git a/observer/src/main/java/me/twc/source/observer/widget/SourceObserverView.kt b/observer/src/main/java/me/twc/source/observer/widget/SourceObserverView.kt
index e372900..806a2c5 100644
--- a/observer/src/main/java/me/twc/source/observer/widget/SourceObserverView.kt
+++ b/observer/src/main/java/me/twc/source/observer/widget/SourceObserverView.kt
@@ -56,6 +56,10 @@ abstract class SourceObserverView @JvmOverloads constructor(
showRetry()
}
+ override fun showSourceEmptyView() {
+ showEmpty()
+ }
+
override fun showSourceSuccessView() {
showContent()
}
diff --git a/paging/.gitignore b/paging/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/paging/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/paging/build.gradle b/paging/build.gradle
new file mode 100644
index 0000000..3a7bb7d
--- /dev/null
+++ b/paging/build.gradle
@@ -0,0 +1,71 @@
+plugins {
+ id 'com.android.library'
+ id 'kotlin-android'
+ id 'maven-publish'
+}
+
+android {
+ compileSdkVersion 30
+ buildToolsVersion "30.0.2"
+
+ defaultConfig {
+ minSdkVersion 21
+ targetSdkVersion 30
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+}
+
+// 用于打包源代码的任务
+task androidSourcesJar(type: Jar) {
+ archiveClassifier.set('sources')
+ from android.sourceSets.main.java.srcDirs
+}
+
+afterEvaluate {
+ publishing {
+ publications {
+ // Creates a Maven publication called "release".
+ release(MavenPublication) {
+ // Applies the component for the release build variant.
+ from components.release
+ artifact androidSourcesJar
+ // You can then customize attributes of the publication as shown below.
+ groupId = 'com.github.tangwanchao'
+ artifactId = 'source-paging'
+ version = '2.0.0'
+ }
+ }
+ }
+}
+
+dependencies {
+
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+
+ implementation 'androidx.core:core-ktx:1.3.2'
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'com.google.android.material:material:1.2.1'
+
+ compileOnly 'com.scwang.smart:refresh-layout-kernel:2.0.3'
+
+ compileOnly project(path: ':source')
+ compileOnly project(path: ':observer')
+}
\ No newline at end of file
diff --git a/paging/consumer-rules.pro b/paging/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/paging/proguard-rules.pro b/paging/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/paging/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
\ No newline at end of file
diff --git a/paging/src/androidTest/java/me/twc/source/observer/paging/ExampleInstrumentedTest.kt b/paging/src/androidTest/java/me/twc/source/observer/paging/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..a048373
--- /dev/null
+++ b/paging/src/androidTest/java/me/twc/source/observer/paging/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package me.twc.source.observer.paging
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("me.twc.source.observer.paging.test", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/paging/src/main/AndroidManifest.xml b/paging/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..3c060ca
--- /dev/null
+++ b/paging/src/main/AndroidManifest.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/paging/src/main/java/me/twc/source/observer/paging/IPagination.kt b/paging/src/main/java/me/twc/source/observer/paging/IPagination.kt
new file mode 100644
index 0000000..b2b74f8
--- /dev/null
+++ b/paging/src/main/java/me/twc/source/observer/paging/IPagination.kt
@@ -0,0 +1,20 @@
+package me.twc.source.observer.paging
+
+/**
+ * @author 唐万超
+ * @date 2022/09/22
+ */
+interface IPagination {
+ /**
+ * 是否有更多数据
+ *
+ * @return [true : 没有更多数据]
+ * [false: 有更多数据]
+ */
+ fun noMoreData():Boolean
+
+ /**
+ * 获取分页的数据
+ */
+ fun getPagingDataList():List
+}
\ No newline at end of file
diff --git a/paging/src/main/java/me/twc/source/observer/paging/ObserverUtil.kt b/paging/src/main/java/me/twc/source/observer/paging/ObserverUtil.kt
new file mode 100644
index 0000000..c477dc9
--- /dev/null
+++ b/paging/src/main/java/me/twc/source/observer/paging/ObserverUtil.kt
@@ -0,0 +1,64 @@
+package me.twc.source.observer.paging
+
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.LiveData
+import com.scwang.smart.refresh.layout.SmartRefreshLayout
+import me.twc.source.ErrorSource
+import me.twc.source.LoadingSource
+import me.twc.source.Source
+import me.twc.source.SuccessSource
+import me.twc.source.observer.engine.ISourceObserverView
+
+/**
+ * 配合 [SmartRefreshLayout] 刷新观察
+ */
+fun LiveData