riku
2022-02-18 d59d55575d913646b7a90fca651904ab889c6723
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.flightfeather.ducha.module.common
 
import android.arch.lifecycle.Observer
import android.arch.lifecycle.ViewModelProviders
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.view.Menu
import android.view.MenuItem
import android.view.View
import cn.flightfeather.thirdappmodule.adapter.AllRecyclerViewAdapter
import cn.flightfeather.thirdappmodule.model.event.FileExportEvent
import cn.flightfeather.thirdappmodule.module.base.BaseActivity
import cn.flightfeather.thirdappmodule.module.base.startActivity
import cn.flightfeather.thirdappmodule.util.DateFormatter
import cn.flightfeather.thirdappmodule.util.DialogUtil2
import cn.flightfeather.thirdappmodule.util.SystemServiceUtils
import cn.flightfeather.thirdappmodule.util.size
import com.flightfeather.ducha.R
import kotlinx.android.synthetic.main.dc_activity_exported_file.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.io.File
 
/**
 * @author riku
 * Date: 2020/6/13
 * 文件导出activity
 */
class ExportedFileActivity : BaseActivity(), View.OnClickListener {
 
    private lateinit var viewModel: FileExportViewModel
 
    private var adapter: AllRecyclerViewAdapter<File>? = null
 
    override fun getLayoutId(): Int = R.layout.dc_activity_exported_file
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        viewModel = ViewModelProviders.of(this).get(FileExportViewModel::class.java)
 
        EventBus.getDefault().register(this)
 
        supportActionBar?.apply {
            title = "文件导出"
            setDisplayHomeAsUpEnabled(true)
        }
 
        initList()
        initObserver()
 
        btn_export.setOnClickListener(this)
        fab_export.setOnClickListener(this)
 
        viewModel.getExportFiles()
    }
 
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        super.onCreateOptionsMenu(menu)
        menuInflater.inflate(R.menu.menu_file_option, menu)
        return true
    }
 
    override fun onOptionsItemSelected(item: MenuItem?): Boolean {
        when (item?.itemId) {
            android.R.id.home -> onBackPressed()
            R.id.action_clear -> viewModel.deleteAllFiles()
        }
        return super.onOptionsItemSelected(item)
    }
 
    private fun initList() {
        adapter = object : AllRecyclerViewAdapter<File>(viewModel.dataList.value, R.layout.dc_item_file_export, this) {
            override fun bindView(holder: MyViewHolder?, obj: File?, isSelected: Boolean, position: Int) {
                holder?.setText(R.id.txt_file_name, obj?.name)
                        ?.setText(R.id.txt_file_time, DateFormatter.dateTimeFormat2.format(obj?.lastModified()))
                        ?.setText(R.id.txt_file_size, obj?.size())
                        ?.setOnItemClickListener {
                            DialogUtil2.showBottomDialog(this@ExportedFileActivity, rootView, listOf("分享", "删除"), listOf ({ p->
                                SystemServiceUtils.shareFile(this@ExportedFileActivity, obj?.path)
                                p.dismiss()
                            }, {p->
                                viewModel.deleteFile(obj)
                                viewModel.dataList.value?.removeAt(position)
                                notifyItemRemoved(position)
                                notifyItemRangeChanged(position, viewModel.dataList.value!!.size - position)
                                refreshEmptyView()
                                p.dismiss()
                            }))
                        }
            }
        }
        recyclerView.adapter = adapter
        recyclerView.layoutManager = LinearLayoutManager(this)
        ll_empty_view.visibility = View.VISIBLE
    }
 
    private fun initObserver() {
        viewModel.dataList.observe(this, Observer {
            adapter?.notifyDataSetChanged()
            refreshEmptyView()
        })
    }
 
    @Subscribe(threadMode = ThreadMode.MAIN)
    fun onFileExported(event: FileExportEvent) {
        viewModel.dataList.value?.add(File(event.path))
        recyclerView.postDelayed({
            adapter?.notifyDataSetChanged()
            refreshEmptyView()
        }, 500)
    }
 
    private fun refreshEmptyView() {
        if (viewModel.dataList.value?.isNotEmpty() == true) {
            ll_empty_view.visibility = View.GONE
        } else {
            ll_empty_view.visibility = View.VISIBLE
        }
    }
 
    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.btn_export,
            R.id.fab_export-> {
                this.startActivity(FileExportActivity::class.java)
            }
        }
    }
}