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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
package cn.flightfeather.thirdappmodule.module.inspection
 
import android.annotation.SuppressLint
import android.arch.lifecycle.Observer
import android.arch.lifecycle.ViewModelProviders
import android.content.Intent
import android.os.Bundle
import android.support.design.widget.TabLayout
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.view.ViewPager
import android.support.v7.widget.LinearLayoutManager
import android.view.View
import cn.flightfeather.thirdappmodule.R
import cn.flightfeather.thirdappmodule.adapter.AllRecyclerViewAdapter
import cn.flightfeather.thirdappmodule.bean.entity.Inspection
import cn.flightfeather.thirdappmodule.bean.entity.Scense
import cn.flightfeather.thirdappmodule.bean.entity.Subtask
import cn.flightfeather.thirdappmodule.model.bean.LedgerRecord
import cn.flightfeather.thirdappmodule.model.event.ProblemEvent
import cn.flightfeather.thirdappmodule.module.base.BaseActivity
import cn.flightfeather.thirdappmodule.module.base.TabViewPagerSetInterface
import cn.qqtheme.framework.picker.OptionPicker
import kotlinx.android.synthetic.main.activity_pic_evidence.*
import kotlinx.android.synthetic.main.layout_tab_viewpager.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.jetbrains.anko.toast
import java.util.*
import kotlin.collections.ArrayList
 
/**
 * @author riku
 * Date:2022/4/12
 *
 */
@SuppressLint("SetTextI18n")
class PicEvidenceActivity : BaseActivity(), TabViewPagerSetInterface {
 
    companion object {
        // 选取图片最大数量
        const val MAX_PIC: Int = 3
    }
 
    override fun getLayoutId(): Int = R.layout.activity_pic_evidence
 
    lateinit var viewModel: PicEvidenceViewModel
 
    private val tabTitles = mutableListOf<String>()
    private val tabFragments = mutableListOf<Fragment>()
 
    private val months = listOf("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12")
    private var year: Int = 2022
    private var month = months[0]
    private lateinit var datePicker: OptionPicker
 
    private var subTask: Subtask? = null
    private var inspection: Inspection? = null
    private var scene: Scense? = null
    private var lat = 0.0
    private var lng = 0.0
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
 
        EventBus.getDefault().register(this)
        viewModel = ViewModelProviders.of(this).get(PicEvidenceViewModel::class.java)
 
        getExtra()
        initUI()
        initDatePicker()
        initObserver()
        initTab()
        initViewPager()
 
        scene?.let {
            viewModel.searchLedgerRecord(it.guid, it.typeid.toInt(), "$year-$month")
        }
    }
 
    private fun getExtra() {
        subTask = intent.getSerializableExtra("subTask") as Subtask?
        inspection = intent.getSerializableExtra("inspection") as Inspection?
        scene = intent.getSerializableExtra("scene") as Scense?
        lat = intent.getDoubleExtra("lat", 0.0)
        lng = intent.getDoubleExtra("lng", 0.0)
    }
 
    private fun initUI() {
        img_back.setOnClickListener { onBackPressed() }
 
        val cal = Calendar.getInstance()
        year = cal.get(Calendar.YEAR)
        val mon = cal[Calendar.MONTH]
        month = months[mon]
        tv_menu.apply {
            text = "${year}年"
            setOnClickListener { datePicker.show() }
        }
        rv_month.apply {
            val monthAdapter = object : AllRecyclerViewAdapter<String>(months, R.layout.item_single_text, this@PicEvidenceActivity) {
                override fun bindView(holder: MyViewHolder?, obj: String?, isSelected: Boolean, position: Int) {
                    holder?.setText(R.id.tv_text, "${obj}月")
                            ?.setSelected(R.id.tv_text, isSelected)
                            ?.setOnItemClickListener {
                                setAllFalse()
                                setSelected(true, position)
                                notifyDataSetChanged()
                                viewModel.clearPic()
                                viewModel.searchLedgerRecord(scene!!.guid, scene!!.typeid.toInt(), "$year-$obj")
                            }
                }
            }
            monthAdapter.setSelected(true, mon)
            adapter = monthAdapter
            layoutManager = LinearLayoutManager(this@PicEvidenceActivity, LinearLayoutManager.HORIZONTAL, false)
            adapter?.notifyDataSetChanged()
        }
 
        tv_selected.text = "已选(0/${MAX_PIC})"
        btn_fail.apply {
            visibility = View.GONE
            setOnClickListener { viewModel.clearPic() }
        }
        btn_pass.apply {
            visibility = View.VISIBLE
            setOnClickListener { submit() }
        }
    }
 
    private fun initObserver() {
        // 获取台账成功后,初始化viewpager
        viewModel.ledgerTypes.observe(this, Observer {
            // 有记录时生成viewpager界面
            if (it?.isNotEmpty() == true) {
                refreshTabViewPager(it)
                viewpagerNotify()
                layout_v.visibility = View.VISIBLE
                layout_e.visibility = View.GONE
            }
            // 无记录时生成无记录提醒界面
            else {
                layout_v.visibility = View.GONE
                layout_e.visibility = View.VISIBLE
            }
        })
 
        // 图片选取
        viewModel.selectedImgUrls.observe(this, Observer {
            it?.size?.let {s ->
                tv_selected.text = "已选(${s}/${MAX_PIC})"
                if (s > 0) {
                    btn_fail.visibility = View.VISIBLE
                } else {
                    btn_fail.visibility = View.GONE
                }
            }
        })
    }
 
    private fun initDatePicker() {
        var thisYear = year
        val yearList = mutableListOf<String>()
        while (thisYear > 1990) {
            yearList.add(thisYear.toString())
            thisYear--
        }
        datePicker = OptionPicker(this, yearList).apply {
            title = "年份"
            setOnOptionPickListener(object : OptionPicker.OnOptionPickListener() {
                override fun onOptionPicked(index: Int, item: String?) {
                    item?.let { year = it.toInt()}
                    tv_menu.text = "${year}年"
                    scene?.let {
                        viewModel.searchLedgerRecord(it.guid, it.typeid.toInt(), "$year-$month")
                    }
                }
            })
            this.setCancelText("取消")
            this.setSubmitText("确定")
        }
    }
    /**
     * 提交所选图片,跳转问题取证界面
     */
    private fun submit() {
        viewModel.selectedImgUrls.value?.let {
            when {
                it.isEmpty() -> toast("请选择图片")
                it.size > MAX_PIC -> toast("所选图片超过最大数量!")
                else -> {
                    val intent = Intent(this, MenuEvidenceActivity::class.java).apply {
                        putExtra("subTask", subTask)
                        putExtra("inspection", inspection)
                        putExtra("scene", scene)
                        putExtra("lat", lat)
                        putExtra("lng", lng)
                        putStringArrayListExtra("picUrls", ArrayList(it))
                    }
                    startActivity(intent)
                }
            }
        }
    }
 
    /**
     * 刷新viewpager
     */
    private fun refreshTabViewPager(list: LinkedHashMap<String, MutableList<LedgerRecord>>) {
        tabTitles.clear()
        tabFragments.clear()
        list.forEach { (k, v) ->
            tabTitles.add(k)
            tabFragments.add(PicEvidenceFragment.newInstance(ArrayList(v)))
        }
    }
 
    override fun getMyTabMode(): Int  = TabLayout.MODE_SCROLLABLE
 
    override fun getTab(): TabLayout = tab
 
    override fun getViewPager(): ViewPager = view_pager
 
    override fun getTitles(): List<String> {
        tabTitles.clear()
        viewModel.ledgerTypes.value?.forEach { (k, _) ->
            tabTitles.add(k)
        }
        return tabTitles
    }
 
    override fun getTabFragments(): List<Fragment> {
        tabFragments.clear()
        viewModel.ledgerTypes.value?.forEach { (_, v)->
            tabFragments.add(PicEvidenceFragment.newInstance(ArrayList(v)))
        }
        return tabFragments
    }
 
    override fun getMyFragmentManager(): FragmentManager  = supportFragmentManager
 
    @Subscribe
    fun onProSubmit(problemEvent: ProblemEvent) {
        viewModel.clearPic()
    }
}