Skip to content

Commit 60367d9

Browse files
feat(lite): 添加空视图和进度对话框功能
- 新增 EmptyView 组件用于显示空数据页面 - 添加 ProgressDialog 和 UpdateDialog 用于显示进度加载和版本更新对话框 - 实现 FileDownloadManager 用于下载文件 - 优化 GalleryScaleHelper 以支持 RecyclerView 缩放效果 - 更新相关布局文件和 Fragment 以支持新功能
1 parent 9eb7f47 commit 60367d9

39 files changed

+943
-335
lines changed

app/src/main/java/com/pengxh/kt/lib/fragments/WidgetPackageFragment.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.pengxh.kt.lib.fragments.widget.CircleProgressBarFragment
1313
import com.pengxh.kt.lib.fragments.widget.DeleteEditTextFragment
1414
import com.pengxh.kt.lib.fragments.widget.DialogFragment
1515
import com.pengxh.kt.lib.fragments.widget.EasyPopupWindowFragment
16+
import com.pengxh.kt.lib.fragments.widget.EmptyViewFragment
1617
import com.pengxh.kt.lib.fragments.widget.KeyBoardViewFragment
1718
import com.pengxh.kt.lib.fragments.widget.NoScrollViewPagerFragment
1819
import com.pengxh.kt.lib.fragments.widget.SlideBarViewFragment
@@ -25,11 +26,12 @@ class WidgetPackageFragment : KotlinBaseFragment<FragmentWidgetPackageBinding>()
2526
private lateinit var slideAdapter: SlideAdapter
2627
private val itemTitles = arrayOf(
2728
"音频录制及播放",
28-
"仿iOS对话框",
29+
"对话框",
2930
"空气指数表盘",
3031
"圆形进度条",
3132
"带删除的输入框",
3233
"PopupWindow",
34+
"空白页面",
3335
"数字键盘",
3436
"NoScrollViewPager",
3537
"联系人侧边栏",
@@ -45,6 +47,7 @@ class WidgetPackageFragment : KotlinBaseFragment<FragmentWidgetPackageBinding>()
4547
fragmentPages.add(CircleProgressBarFragment())
4648
fragmentPages.add(DeleteEditTextFragment())
4749
fragmentPages.add(EasyPopupWindowFragment())
50+
fragmentPages.add(EmptyViewFragment())
4851
fragmentPages.add(KeyBoardViewFragment())
4952
fragmentPages.add(NoScrollViewPagerFragment())
5053
fragmentPages.add(SlideBarViewFragment())

app/src/main/java/com/pengxh/kt/lib/fragments/extensions/StringExtensionFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import android.view.LayoutInflater
55
import android.view.ViewGroup
66
import com.pengxh.kt.lib.databinding.FragmentExtensionStringBinding
77
import com.pengxh.kt.lite.base.KotlinBaseFragment
8-
import com.pengxh.kt.lite.extensions.breakLine
98
import com.pengxh.kt.lite.extensions.createLogFile
109
import com.pengxh.kt.lite.extensions.dateToTimestamp
1110
import com.pengxh.kt.lite.extensions.diffCurrentTime
@@ -19,6 +18,7 @@ import com.pengxh.kt.lite.extensions.isNumber
1918
import com.pengxh.kt.lite.extensions.isPhoneNumber
2019
import com.pengxh.kt.lite.extensions.show
2120
import com.pengxh.kt.lite.extensions.timestampToCompleteDate
21+
import com.pengxh.kt.lite.extensions.wrapLine
2222
import com.pengxh.kt.lite.extensions.writeToFile
2323
import java.io.File
2424
import java.util.Calendar
@@ -63,7 +63,7 @@ class StringExtensionFragment : KotlinBaseFragment<FragmentExtensionStringBindin
6363
}
6464

6565
binding.breakLineButton.setOnClickListener {
66-
binding.breakLineResultView.text = binding.breakLineView.text.toString().breakLine(24)
66+
binding.breakLineResultView.text = binding.breakLineView.text.toString().wrapLine(24)
6767
}
6868

6969
binding.timeToTimestampButton.setOnClickListener {

app/src/main/java/com/pengxh/kt/lib/fragments/utils/FileDownloadManagerFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class FileDownloadManagerFragment : KotlinBaseFragment<FragmentUtilsFileDownload
5959
binding.startDownloadButton.isEnabled = true
6060
}
6161

62-
override fun onFailed(t: Throwable) {
62+
override fun onDownloadFailed(t: Throwable) {
6363
binding.startDownloadButton.isEnabled = true
6464
}
6565
}).build().start()

app/src/main/java/com/pengxh/kt/lib/fragments/utils/GalleryScaleHelperFragment.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ import kotlinx.coroutines.withContext
2121
class GalleryScaleHelperFragment : KotlinBaseFragment<FragmentUtilsGalleryScaleBinding>() {
2222

2323
private val imageArray = mutableListOf(
24-
"https://img.zcool.cn/community/010d5c5b9d17c9a8012099c8781b7e.jpg@1280w_1l_2o_100sh.jpg",
25-
"https://tse4-mm.cn.bing.net/th/id/OIP-C.6szqS1IlGtWsaiHQUtUOVwHaQC?rs=1&pid=ImgDetMain",
26-
"https://img.zcool.cn/community/01a15855439bdf0000019ae9299cce.jpg@1280w_1l_2o_100sh.jpg",
24+
"https://pic1.zhimg.com/v2-0cc45f5fda6e8ff79350ec1303835629_r.jpg",
25+
"https://pic1.zhimg.com/v2-0cc45f5fda6e8ff79350ec1303835629_r.jpg",
26+
"https://pic1.zhimg.com/v2-0cc45f5fda6e8ff79350ec1303835629_r.jpg",
27+
"https://pic1.zhimg.com/v2-0cc45f5fda6e8ff79350ec1303835629_r.jpg",
2728
"https://pic1.zhimg.com/v2-0cc45f5fda6e8ff79350ec1303835629_r.jpg"
2829
)
2930
private val scaleHelper by lazy { GalleryScaleHelper() }

app/src/main/java/com/pengxh/kt/lib/fragments/utils/SocketFragment.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class SocketFragment : KotlinBaseFragment<FragmentUtilsSocketBinding>(), OnTcpCo
7575
val address = text.toString()
7676
val strings = address.split(":")
7777
if (tcpClient.isRunning()) {
78-
tcpClient.stop()
78+
tcpClient.stop(false)
7979
} else {
8080
tcpClient.start(strings[0], strings[1].toInt())
8181
}
@@ -117,7 +117,7 @@ class SocketFragment : KotlinBaseFragment<FragmentUtilsSocketBinding>(), OnTcpCo
117117
if (url.isNullOrBlank()) {
118118
return@setOnClickListener
119119
}
120-
webSocketClient.start("$url/" + System.currentTimeMillis())
120+
webSocketClient.start("$url" + System.currentTimeMillis())
121121
}
122122
}
123123
}
@@ -191,13 +191,17 @@ class SocketFragment : KotlinBaseFragment<FragmentUtilsSocketBinding>(), OnTcpCo
191191
}
192192
}
193193

194-
override fun onFailure(webSocket: WebSocket) {
194+
override fun onFailure(webSocket: WebSocket?, t: Throwable?) {
195+
196+
}
197+
198+
override fun onMaxRetryReached() {
195199

196200
}
197201

198202
override fun onDestroyView() {
199203
super.onDestroyView()
200-
tcpClient?.stop()
204+
tcpClient.stop(false)
201205
udpClient.release()
202206
}
203207
}

app/src/main/java/com/pengxh/kt/lib/fragments/widget/DialogFragment.kt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,20 @@ import com.pengxh.kt.lib.R
77
import com.pengxh.kt.lib.databinding.FragmentWidgetDialogBinding
88
import com.pengxh.kt.lite.base.KotlinBaseFragment
99
import com.pengxh.kt.lite.extensions.convertColor
10+
import com.pengxh.kt.lite.extensions.createDownloadFileDir
11+
import com.pengxh.kt.lite.extensions.show
1012
import com.pengxh.kt.lite.extensions.timestampToCompleteDate
13+
import com.pengxh.kt.lite.utils.FileDownloadManager
1114
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
1215
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
1316
import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
1417
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
1518
import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog
1619
import com.pengxh.kt.lite.widget.dialog.GlobeAlertDialog
1720
import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog
21+
import com.pengxh.kt.lite.widget.dialog.ProgressDialog
22+
import com.pengxh.kt.lite.widget.dialog.UpdateDialog
23+
import java.io.File
1824

1925
class DialogFragment : KotlinBaseFragment<FragmentWidgetDialogBinding>() {
2026
override fun initViewBinding(
@@ -145,5 +151,49 @@ class DialogFragment : KotlinBaseFragment<FragmentWidgetDialogBinding>() {
145151
.build()
146152
.show()
147153
}
154+
binding.showProgressDialogButton.setOnClickListener {
155+
val progressDialog = ProgressDialog(requireContext())
156+
progressDialog.show()
157+
FileDownloadManager.Builder()
158+
.setDownloadFileSource("http://111.198.10.15:20110/apk/2025-01/b33739c02dba389072319b9d5aea95e0.apk")
159+
.setFileSuffix("apk")
160+
.setFileSaveDirectory(requireContext().createDownloadFileDir())
161+
.setOnFileDownloadListener(object : FileDownloadManager.OnFileDownloadListener {
162+
override fun onDownloadStart(total: Long) {
163+
progressDialog.setMaxProgress(total)
164+
}
165+
166+
override fun onDownloadEnd(file: File) {
167+
progressDialog.dismiss()
168+
"下载成功".show(requireContext())
169+
}
170+
171+
override fun onDownloadFailed(t: Throwable) {
172+
t.printStackTrace()
173+
progressDialog.dismiss()
174+
}
175+
176+
override fun onProgressChanged(progress: Long) {
177+
progressDialog.updateProgress(progress)
178+
}
179+
}).build().start()
180+
}
181+
binding.showUpdateDialogButton.setOnClickListener {
182+
UpdateDialog.Builder()
183+
.setContext(requireContext())
184+
.setUpdateMessage(
185+
arrayListOf(
186+
"这里是更新内容",
187+
"这里是更新内容",
188+
"这里是更新内容",
189+
"这里是更新内容"
190+
)
191+
)
192+
.setOnUpdateListener(object : UpdateDialog.OnUpdateListener {
193+
override fun onUpdate() {
194+
195+
}
196+
}).build().show()
197+
}
148198
}
149199
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.pengxh.kt.lib.fragments.widget
2+
3+
import android.os.Bundle
4+
import android.view.LayoutInflater
5+
import android.view.ViewGroup
6+
import com.pengxh.kt.lib.databinding.FragmentWidgetEmptyViewBinding
7+
import com.pengxh.kt.lite.base.KotlinBaseFragment
8+
import com.pengxh.kt.lite.extensions.show
9+
import com.pengxh.kt.lite.widget.EmptyView
10+
11+
class EmptyViewFragment : KotlinBaseFragment<FragmentWidgetEmptyViewBinding>() {
12+
override fun initViewBinding(
13+
inflater: LayoutInflater,
14+
container: ViewGroup?
15+
): FragmentWidgetEmptyViewBinding {
16+
return FragmentWidgetEmptyViewBinding.inflate(inflater, container, false)
17+
}
18+
19+
override fun setupTopBarLayout() {
20+
21+
}
22+
23+
override fun initOnCreate(savedInstanceState: Bundle?) {
24+
25+
}
26+
27+
override fun observeRequestState() {
28+
29+
}
30+
31+
override fun initEvent() {
32+
binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener {
33+
override fun onReloadButtonClicked() {
34+
"重新加载".show(requireContext())
35+
}
36+
})
37+
}
38+
}

app/src/main/res/layout/fragment_utils_socket.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
android:layout_height="match_parent"
5656
android:layout_weight="1"
5757
android:singleLine="true"
58-
android:text="192.168.161.200:3000"
58+
android:text="192.168.3.2:9000"
5959
android:textColor="@color/black"
6060
android:textSize="@dimen/sp_16" />
6161
</LinearLayout>
@@ -127,7 +127,7 @@
127127
android:layout_height="match_parent"
128128
android:layout_weight="1"
129129
android:singleLine="true"
130-
android:text="192.168.3.2:7777"
130+
android:text="192.168.3.2:5000"
131131
android:textColor="@color/black"
132132
android:textSize="@dimen/sp_16" />
133133
</LinearLayout>
@@ -212,7 +212,7 @@
212212
android:layout_height="match_parent"
213213
android:layout_weight="1"
214214
android:singleLine="true"
215-
android:text="ws://192.168.161.200:8080/websocket"
215+
android:text="ws://192.168.3.2:9000/"
216216
android:textColor="@color/black"
217217
android:textSize="@dimen/sp_16" />
218218
</LinearLayout>

app/src/main/res/layout/fragment_widget_dialog.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,20 @@
6262
android:layout_margin="@dimen/dp_10"
6363
android:text="断网对话框"
6464
android:textColor="@color/black" />
65+
66+
<Button
67+
android:id="@+id/showProgressDialogButton"
68+
android:layout_width="match_parent"
69+
android:layout_height="wrap_content"
70+
android:layout_margin="@dimen/dp_10"
71+
android:text="进度加载对话框"
72+
android:textColor="@color/black" />
73+
74+
<Button
75+
android:id="@+id/showUpdateDialogButton"
76+
android:layout_width="match_parent"
77+
android:layout_height="wrap_content"
78+
android:layout_margin="@dimen/dp_10"
79+
android:text="更新版本对话框"
80+
android:textColor="@color/black" />
6581
</LinearLayout>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:id="@+id/rootView"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent"
6+
android:orientation="vertical">
7+
8+
<com.pengxh.kt.lite.widget.EmptyView
9+
android:id="@+id/emptyView"
10+
android:layout_width="match_parent"
11+
android:layout_height="match_parent" />
12+
</LinearLayout>

0 commit comments

Comments
 (0)