1
+ package me.dumpIntent
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.content.Intent
5
+ import android.net.Uri
6
+ import android.os.Bundle
7
+ import android.view.Menu
8
+ import android.view.MenuItem
9
+ import androidx.annotation.Keep
10
+ import androidx.appcompat.app.AppCompatActivity
11
+ import androidx.recyclerview.widget.LinearLayoutManager
12
+ import com.google.android.material.dialog.MaterialAlertDialogBuilder
13
+ import com.google.android.material.snackbar.Snackbar
14
+ import com.google.gson.Gson
15
+ import me.dumpIntent.adapter.ConfigAdapter
16
+ import me.dumpIntent.bean.*
17
+ import me.dumpIntent.databinding.ActivityMainBinding
18
+ import me.dumpIntent.util.AppUtils
19
+ import me.dumpIntent.util.CipherUtils
20
+ import me.dumpIntent.util.ToolUtils
21
+
22
+ class MainActivity : AppCompatActivity () {
23
+ private val uri = Uri .parse(" content://me.dumpIntent.provider/configs" )
24
+ private lateinit var binding: ActivityMainBinding
25
+
26
+ private val mAdapter by lazy { ConfigAdapter { onItemClick(it) } }
27
+ override fun onCreate (savedInstanceState : Bundle ? ) {
28
+ super .onCreate(savedInstanceState)
29
+ binding = ActivityMainBinding .inflate(layoutInflater)
30
+ setContentView(binding.root)
31
+ val moduleLiveTip = if (isModuleLive()) " 模块已激活" else " 模块未激活"
32
+ Snackbar .make(binding.rev, moduleLiveTip, Snackbar .LENGTH_SHORT ).show()
33
+ initView()
34
+ fetchData()
35
+ }
36
+
37
+ private fun initView () {
38
+ binding.apply {
39
+ rev.apply {
40
+ adapter = mAdapter
41
+ layoutManager = LinearLayoutManager (this @MainActivity)
42
+ }
43
+ }
44
+ }
45
+
46
+ @SuppressLint(" SetTextI18n" )
47
+ private fun onItemClick (mainItem : MainItem ) {
48
+ val configBean = mainItem.configBean
49
+ var extraStr = " "
50
+ if (configBean.extras.isNotEmpty()) {
51
+ configBean.extras.forEach {
52
+ extraStr + = " key:${it.key} , value:${it.value} \n "
53
+ }
54
+ extraStr = extraStr.substring(0 , extraStr.length - 1 )
55
+ }
56
+ val message =
57
+ " 应用名: ${mainItem.appName} \n 包名: ${configBean.packageName} \n 类名: ${configBean.className} \n " +
58
+ " Action:${configBean.action} \n Data: ${configBean.data} \n Extras: $extraStr "
59
+ MaterialAlertDialogBuilder (this )
60
+ .setTitle(" 详情" )
61
+ .setMessage(message)
62
+ .setPositiveButton(" 复制为Anywhere配置" ) { dialog, _ ->
63
+ val bean2 = Bean2 (configBean.data, configBean.action, " " , configBean.extras)
64
+ val bean1 = Bean1 (
65
+ app_name = mainItem.appName,
66
+ id = (System .currentTimeMillis()).toString(),
67
+ param_1 = configBean.packageName,
68
+ param_2 = configBean.className,
69
+ param_3 = Gson ().toJson(bean2),
70
+ time_stamp = (System .currentTimeMillis()).toString()
71
+ )
72
+ CipherUtils .encrypt(Gson ().toJson(bean1))?.let { ToolUtils .toClip(this , it) }
73
+ dialog.dismiss()
74
+ }
75
+ .setNegativeButton(" 取消" , null )
76
+ .show()
77
+ }
78
+
79
+ private fun fetchData () {
80
+ val dataList = ArrayList <MainItem >()
81
+ contentResolver.query(uri, null , null , null , " ID DESC" )?.apply {
82
+ while (moveToNext()) {
83
+ val config = getString(getColumnIndex(" config" ))
84
+ val id = getInt(getColumnIndex(" id" ))
85
+ val configBean = Gson ().fromJson(config, ConfigBean ::class .java)
86
+ dataList.add(
87
+ MainItem (
88
+ id,
89
+ AppUtils .getAppName(this @MainActivity, configBean.packageName),
90
+ AppUtils .getIcon(this @MainActivity, configBean.packageName),
91
+ configBean
92
+ )
93
+ )
94
+ }
95
+ close()
96
+ }
97
+ mAdapter.submitList(dataList)
98
+ if (dataList.size >= 50 ) Snackbar .make(binding.rev, " 请及时清理数据,以免加载数据过慢" , Snackbar .LENGTH_SHORT ).show()
99
+ }
100
+
101
+ @Keep
102
+ private fun isModuleLive () = false
103
+
104
+ override fun onCreateOptionsMenu (menu : Menu ): Boolean {
105
+ menuInflater.inflate(R .menu.menu_main, menu)
106
+ return true
107
+ }
108
+
109
+ override fun onOptionsItemSelected (item : MenuItem ): Boolean {
110
+ when (item.itemId) {
111
+ R .id.delete -> {
112
+ contentResolver.delete(uri, null , null )
113
+ fetchData()
114
+ }
115
+ R .id.refresh -> fetchData()
116
+ R .id.github -> {
117
+ val intent = Intent ()
118
+ intent.data = Uri .parse(" https://github.com/littleWhiteDuck/IntentDump" )
119
+ startActivity(intent)
120
+ }
121
+ R .id.about -> showAboutMe()
122
+ }
123
+ return true
124
+ }
125
+
126
+ private fun showAboutMe () {
127
+ MaterialAlertDialogBuilder (this )
128
+ .setTitle(" 关于" )
129
+ .setMessage(R .string.aboutMe)
130
+ .setPositiveButton(" 确认" , null )
131
+ .setNegativeButton(" 取消" , null )
132
+ .show()
133
+ }
134
+
135
+
136
+ override fun onRestart () {
137
+ super .onRestart()
138
+ fetchData()
139
+ }
140
+ }
0 commit comments