@@ -15,7 +15,10 @@ import android.support.v7.widget.RecyclerView
1515import android.view.LayoutInflater
1616import android.view.View
1717import android.view.animation.AnimationUtils
18- import android.widget.*
18+ import android.widget.CheckBox
19+ import android.widget.RelativeLayout
20+ import android.widget.Toast
21+ import kotlinx.android.synthetic.main.empty_file_list_file_picker.view.*
1922import kotlinx.android.synthetic.main.main_activity_for_file_picker.*
2023import me.rosuh.filepicker.R.string
2124import me.rosuh.filepicker.adapter.FileListAdapter
@@ -39,8 +42,10 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
3942
4043 private var mainHandler = Handler (Looper .getMainLooper())
4144
42- private val loadFileThread by lazy {
43- Thread {
45+ private var loadFileThread: Thread ? = null
46+
47+ private val loadFileRunnable: Runnable by lazy {
48+ Runnable {
4449 val rootFile = if (navDataSource.isEmpty()) {
4550 FileUtils .getRootFile()
4651 } else {
@@ -57,7 +62,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
5762 },
5863 this @FilePickerActivity
5964 )
60- mainHandler.post{
65+ mainHandler.post {
6166 initRv(listData, navDataSource)
6267 setLoadingFinish()
6368 }
@@ -80,14 +85,14 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
8085 * 文件夹为空时展示的空视图
8186 */
8287 private var selectedCount: AtomicInteger = AtomicInteger (0 )
83- private val maxSelectable = FilePickerManager .config? .maxSelectable ? : Int . MAX_VALUE
88+ private val maxSelectable = FilePickerManager .config.maxSelectable
8489 private val pickerConfig by lazy { FilePickerManager .config }
8590 private val fileListListener: RecyclerViewListener by lazy { getListener(rv_list_file_picker) }
8691 private val navListener: RecyclerViewListener by lazy { getListener(rv_nav_file_picker) }
8792
8893
8994 override fun onCreate (savedInstanceState : Bundle ? ) {
90- setTheme(pickerConfig? .themeId ? : R .style. FilePickerThemeReply )
95+ setTheme(pickerConfig.themeId)
9196 super .onCreate(savedInstanceState)
9297 setContentView(R .layout.main_activity_for_file_picker)
9398 // 核验权限
@@ -100,12 +105,15 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
100105
101106 override fun onDestroy () {
102107 super .onDestroy()
103- if (loadFileThread.isAlive) {
104- loadFileThread.interrupt()
108+ if (loadFileThread? .isAlive == true ) {
109+ loadFileThread? .interrupt()
105110 }
106111 }
107112
108- private fun isPermissionGrated () = ContextCompat .checkSelfPermission(this , Manifest .permission.READ_EXTERNAL_STORAGE ) == PackageManager .PERMISSION_GRANTED
113+ private fun isPermissionGrated () = ContextCompat .checkSelfPermission(
114+ this ,
115+ Manifest .permission.READ_EXTERNAL_STORAGE
116+ ) == PackageManager .PERMISSION_GRANTED
109117
110118 /* *
111119 * 申请权限
@@ -156,17 +164,17 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
156164
157165 btn_selected_all_file_picker.apply {
158166 // 单选模式时隐藏并且不初始化
159- if (pickerConfig? .singleChoice == true ) {
167+ if (pickerConfig.singleChoice) {
160168 visibility = View .GONE
161169 return @apply
162170 }
163171 setOnClickListener(this @FilePickerActivity)
164- FilePickerManager .config? .selectAllText? .let {
172+ FilePickerManager .config.selectAllText.let {
165173 text = it
166174 }
167175 }
168176 btn_confirm_file_picker.apply {
169- if (Build .VERSION .SDK_INT <= Build .VERSION_CODES .KITKAT ){
177+ if (Build .VERSION .SDK_INT <= Build .VERSION_CODES .KITKAT ) {
170178 // 小于 4.4 的样式兼容
171179 layoutParams = RelativeLayout .LayoutParams (
172180 RelativeLayout .LayoutParams .WRAP_CONTENT ,
@@ -179,14 +187,18 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
179187
180188 }
181189 setOnClickListener(this @FilePickerActivity)
182- FilePickerManager .config? .confirmText? .let {
190+ FilePickerManager .config.confirmText.let {
183191 text = it
184192 }
185193 }
186194 }
187195
188196 private fun loadList () {
189- loadFileThread.start()
197+ if (loadFileThread?.isAlive == true ) {
198+ loadFileThread?.interrupt()
199+ }
200+ loadFileThread = Thread (loadFileRunnable)
201+ loadFileThread?.start()
190202 }
191203
192204 private fun setLoadingFinish () {
@@ -201,7 +213,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
201213 isRefreshing = true
202214 setColorSchemeColors(
203215 * resources.getIntArray(
204- when (pickerConfig? .themeId) {
216+ when (pickerConfig.themeId) {
205217 R .style.FilePickerThemeCrane -> {
206218 R .array.crane_swl_colors
207219 }
@@ -240,7 +252,9 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
240252 listAdapter = produceListAdapter(listData)
241253 rv_list_file_picker?.apply {
242254 emptyView = LayoutInflater .from(context)
243- .inflate(R .layout.empty_file_list_file_picker, null , false )
255+ .inflate(R .layout.empty_file_list_file_picker, null , false ).apply {
256+ tv_empty_list.text = pickerConfig.emptyListTips
257+ }
244258 adapter = listAdapter
245259 layoutAnimation =
246260 AnimationUtils .loadLayoutAnimation(context, R .anim.layout_item_anim_file_picker)
@@ -295,7 +309,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
295309 // 如果是文件夹,则进入
296310 enterDirAndUpdateUI(item)
297311 } else {
298- FilePickerManager .config? .fileItemOnClickListener? .onItemClick(
312+ FilePickerManager .config.fileItemOnClickListener.onItemClick(
299313 recyclerAdapter,
300314 view,
301315 position
@@ -345,7 +359,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
345359 val item = (recyclerAdapter as FileListAdapter ).getItem(position)
346360 item ? : return
347361 val file = File (item.filePath)
348- val isSkipDir = FilePickerManager .config? .isSkipDir ? : true
362+ val isSkipDir = FilePickerManager .config.isSkipDir
349363 // 如果是文件夹并且没有略过文件夹
350364 if (file.exists() && file.isDirectory && isSkipDir) return
351365 val cb = view.findViewById<CheckBox >(R .id.cb_list_file_picker)
@@ -354,7 +368,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
354368 cb.isChecked -> {
355369 // 当前被选中,现在取消选中
356370 selectedCount.decrementAndGet()
357- FilePickerManager .config? .fileItemOnClickListener? .onItemLongClick(
371+ FilePickerManager .config.fileItemOnClickListener.onItemLongClick(
358372 recyclerAdapter,
359373 view,
360374 position
@@ -363,7 +377,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
363377 isCanSelect() -> {
364378 // 新增选中项情况
365379 selectedCount.incrementAndGet()
366- FilePickerManager .config? .fileItemOnClickListener? .onItemLongClick(
380+ FilePickerManager .config.fileItemOnClickListener.onItemLongClick(
367381 recyclerAdapter,
368382 view,
369383 position
@@ -373,7 +387,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
373387 // 新增失败的情况
374388 Toast .makeText(
375389 this @FilePickerActivity.applicationContext,
376- resources.getString(R .string.max_select_count_tips , maxSelectable),
390+ resources.getString(pickerConfig.maxSelectCountTips , maxSelectable),
377391 Toast .LENGTH_SHORT
378392 ).show()
379393 }
@@ -398,7 +412,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
398412 val item = (recyclerAdapter as FileListAdapter ).getItem(position)
399413 item ? : return
400414 // 文件夹直接进入
401- if (item.isDir && pickerConfig? .isSkipDir != false ) {
415+ if (item.isDir && pickerConfig.isSkipDir) {
402416 enterDirAndUpdateUI(item)
403417 return
404418 }
@@ -507,15 +521,13 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
507521 override fun updateItemUI (isCheck : Boolean ) {
508522 // 取消选中,并且选中数为 0
509523 if (selectedCount.get() == 0 ) {
510- btn_selected_all_file_picker!! .text =
511- pickerConfig?.selectAllText ? : getString(string.file_picker_tv_select_all)
524+ btn_selected_all_file_picker.text = pickerConfig.selectAllText
512525 tv_toolbar_title_file_picker.text = " "
513526 return
514527 }
515- btn_selected_all_file_picker!! .text =
516- pickerConfig?.deSelectAllText ? : getString(string.file_picker_tv_select_all)
528+ btn_selected_all_file_picker.text = pickerConfig.deSelectAllText
517529 tv_toolbar_title_file_picker.text =
518- resources.getString(R .string.file_picker_selected_count , selectedCount.get())
530+ resources.getString(pickerConfig.hadSelectedText , selectedCount.get())
519531 }
520532
521533 override fun onBackPressed () {
@@ -538,7 +550,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
538550 selectedCount.set(0 )
539551 for (data in listAdapter!! .data!! ) {
540552 val file = File (data.filePath)
541- if (pickerConfig? .isSkipDir != false && file.exists() && file.isDirectory) {
553+ if (pickerConfig.isSkipDir && file.exists() && file.isDirectory) {
542554 continue
543555 }
544556 data.setCheck(false )
@@ -548,7 +560,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
548560 for (i in selectedCount.get() until listAdapter!! .data!! .size) {
549561 val data = listAdapter!! .data!! [i]
550562 val file = File (data.filePath)
551- if (pickerConfig? .isSkipDir != false && file.exists() && file.isDirectory) {
563+ if (pickerConfig.isSkipDir && file.exists() && file.isDirectory) {
552564 continue
553565 }
554566 selectedCount.incrementAndGet()
@@ -590,7 +602,7 @@ class FilePickerActivity : AppCompatActivity(), View.OnClickListener,
590602 var count: Long = 0
591603 for (item in listAdapter!! .data!! ) {
592604 val file = File (item.filePath)
593- if (pickerConfig? .isSkipDir != false && file.exists() && file.isDirectory) {
605+ if (pickerConfig.isSkipDir && file.exists() && file.isDirectory) {
594606 continue
595607 }
596608 count++
0 commit comments