@@ -17,117 +17,67 @@ import com.wrbug.developerhelper.mmkv.manager.MMKVManager
1717import android.content.Intent
1818import android.net.Uri
1919import androidx.appcompat.widget.AppCompatButton
20+ import com.wrbug.developerhelper.BuildConfig
2021import com.wrbug.developerhelper.basecommon.BaseActivity
2122import com.wrbug.developerhelper.commonutil.shell.ShellManager
2223import com.wrbug.developerhelper.commonutil.zip
2324import com.wrbug.developerhelper.util.BackupUtils
2425import com.wrbug.developerhelper.commonutil.toUri
26+ import com.wrbug.developerhelper.commonwidget.util.setOnDoubleCheckClickListener
27+ import com.wrbug.developerhelper.commonwidget.util.setOnRootCheckClickListener
28+ import com.wrbug.developerhelper.commonwidget.util.visible
2529import com.wrbug.developerhelper.databinding.ViewAppSettingBinding
2630import gdut.bsx.share2.Share2
2731import gdut.bsx.share2.ShareContentType
2832import org.jetbrains.anko.doAsync
2933import org.jetbrains.anko.uiThread
3034import java.io.File
3135
32- class AppSettingView : ScrollView {
36+ class AppSettingView : ScrollView {
3337
34- var apkInfo: ApkInfo ? = null
38+ private var apkInfo: ApkInfo ? = null
3539 private val configKv = MMKVManager .get(ConfigKv ::class .java)
36- private var exportDexBtn: AppCompatButton ? = null
3740 private lateinit var binding: ViewAppSettingBinding
3841
39- constructor (context: Context ): super (context) {
42+ constructor (context: Context ) : super (context) {
4043 initView()
4144 }
4245
43- constructor (context: Context , attrs: AttributeSet ): super (context, attrs) {
46+ constructor (context: Context , attrs: AttributeSet ) : super (context, attrs) {
4447 initView()
4548 }
4649
50+ fun setApkInfo (apkInfo : ApkInfo ? ) {
51+ this .apkInfo = apkInfo
52+ if (apkInfo?.applicationInfo?.packageName == BuildConfig .APPLICATION_ID ) {
53+ binding.uninstallAppBtn.visible = false
54+ }
55+ }
56+
4757 private fun initView () {
4858 binding = ViewAppSettingBinding .inflate(LayoutInflater .from(context), this , true )
49- exportDexBtn = findViewById(R .id.exportDexBtn)
50- if (configKv.isOpenRoot().not ()) {
51- binding.backupApkBtn.isEnabled = false
52- binding.backupApkDataDirBtn.isEnabled = false
53- binding.restartAppBtn.isEnabled = false
54- binding.stopAppBtn.isEnabled = false
55- binding.deleteAppDataBtn.isEnabled = false
56- exportDexBtn?.isEnabled = false
57- }
5859 initListener()
5960 }
6061
6162 private fun initListener () {
62- binding.backupApkBtn.setOnClickListener {
63+ binding.backupApkBtn.setOnRootCheckClickListener {
6364 doBackupApk()
6465 }
65- binding.backupApkDataDirBtn.setOnClickListener {
66+ binding.backupApkDataDirBtn.setOnRootCheckClickListener {
6667 doBackupDataDir()
6768 }
68- binding.restartAppBtn.setOnClickListener {
69+ binding.restartAppBtn.setOnRootCheckClickListener {
6970 doRestartApp()
7071 }
71- binding.stopAppBtn.setOnClickListener {
72+ binding.stopAppBtn.setOnRootCheckClickListener {
7273 doStopApp()
7374 }
74- binding.deleteAppDataBtn.setOnClickListener {
75+ binding.deleteAppDataBtn.setOnRootCheckClickListener {
7576 doDeleteAppData()
7677 }
77- binding.uninstallAppBtn.setOnClickListener {
78+ binding.uninstallAppBtn.setOnRootCheckClickListener {
7879 doUninstallApp()
7980 }
80-
81- exportDexBtn?.setOnClickListener {
82- doBackupDexData()
83- }
84- }
85-
86- private fun doBackupDexData () {
87- apkInfo?.apply {
88- showToast(context.getString(R .string.packing_files))
89- doAsync {
90- val dir = File (context.externalCacheDir, " dex/${applicationInfo.packageName} " )
91- if (dir.exists()) {
92- ShellManager .rmFile(dir.absolutePath)
93- }
94- dir.mkdirs()
95- val dexDir = " /data/data/${applicationInfo.packageName} /dump"
96- val lsDir = ShellManager .lsDir(dexDir)
97- if (lsDir.isEmpty()) {
98- uiThread {
99- showToast(context.getString(R .string.no_dex_files))
100- }
101- return @doAsync
102- }
103- if (ShellManager .cpFile(dexDir, dir.absolutePath)) {
104- val zipFile =
105- File (context.externalCacheDir, " ${apkInfo?.getAppName() ? : " " } -dex.zip" )
106- dir.zip(zipFile)
107- val uri = zipFile.toUri(context)
108- if (uri == null ) {
109- showToast(R .string.export_failed)
110- return @doAsync
111- }
112- uiThread {
113- showShareDexNotice(uri)
114- }
115- } else {
116- uiThread {
117- showToast(context.getString(R .string.export_failed))
118- }
119- }
120- }
121- }
122- }
123-
124- private fun showShareDexNotice (uri : Uri ) {
125- Share2 .Builder (context as Activity )
126- .setContentType(ShareContentType .FILE )
127- .setShareFileUri(uri)
128- .setOnActivityResult(10 )
129- .build()
130- .shareBySystem()
13181 }
13282
13383 private fun doUninstallApp () {
@@ -142,13 +92,13 @@ class AppSettingView: ScrollView {
14292 }
14393 apkInfo?.apply {
14494 showNotice(
145- context.getString(R .string.confirm_delete_app_data),
146- DialogInterface . OnClickListener { _, _ ->
147- if (AppManagerUtils .clearAppData(applicationInfo.packageName)) {
148- activityFinish()
149- showToast(context.getString(R .string.clear_complete))
150- }
151- })
95+ context.getString(R .string.confirm_delete_app_data)
96+ ) { _, _ ->
97+ if (AppManagerUtils .clearAppData(applicationInfo.packageName)) {
98+ activityFinish()
99+ showToast(context.getString(R .string.clear_complete))
100+ }
101+ }
152102
153103 }
154104 }
@@ -158,13 +108,11 @@ class AppSettingView: ScrollView {
158108 return
159109 }
160110 apkInfo?.apply {
161- showNotice(
162- context.getString(R .string.confirm_stop_app),
163- DialogInterface .OnClickListener { _, _ ->
164- if (AppManagerUtils .forceStopApp(applicationInfo.packageName)) {
165- activityFinish()
166- }
167- })
111+ showNotice(context.getString(R .string.confirm_stop_app)) { _, _ ->
112+ if (AppManagerUtils .forceStopApp(applicationInfo.packageName)) {
113+ activityFinish()
114+ }
115+ }
168116 }
169117 }
170118
@@ -173,8 +121,7 @@ class AppSettingView: ScrollView {
173121 return
174122 }
175123 apkInfo?.apply {
176- showNotice(
177- context.getString(R .string.confirm_restart_app),
124+ showNotice(context.getString(R .string.confirm_restart_app),
178125 DialogInterface .OnClickListener { _, _ ->
179126 AppManagerUtils .restartApp(context, applicationInfo.packageName)
180127 activityFinish()
@@ -202,15 +149,13 @@ class AppSettingView: ScrollView {
202149 }
203150
204151 private fun showShareDataNotice (backupAppData : File ) {
205- showNotice(
206- context.getString(R .string.backup_success_and_share_msg),
152+ showNotice(context.getString(R .string.backup_success_and_share_msg),
207153 DialogInterface .OnClickListener { _, _ ->
208154 (context as BaseActivity ).requestPermission(arrayOf(Manifest .permission.READ_EXTERNAL_STORAGE ),
209- object : BaseActivity .PermissionCallback () {
155+ object : BaseActivity .PermissionCallback () {
210156 override fun granted () {
211157 val zipFile = File (
212- context.externalCacheDir,
213- " ${apkInfo?.getAppName() ? : " " } -data.zip"
158+ context.externalCacheDir, " ${apkInfo?.getAppName() ? : " " } -data.zip"
214159 )
215160 backupAppData.zip(zipFile)
216161 val uri = zipFile.toUri(context)
@@ -220,11 +165,8 @@ class AppSettingView: ScrollView {
220165 }
221166 activityFinish()
222167 Share2 .Builder (context as Activity )
223- .setContentType(ShareContentType .FILE )
224- .setShareFileUri(uri)
225- .setOnActivityResult(10 )
226- .build()
227- .shareBySystem()
168+ .setContentType(ShareContentType .FILE ).setShareFileUri(uri)
169+ .setOnActivityResult(10 ).build().shareBySystem()
228170 }
229171
230172 })
@@ -260,19 +202,14 @@ class AppSettingView: ScrollView {
260202 (context as BaseActivity ).requestPermission(arrayOf(
261203 Manifest .permission.READ_EXTERNAL_STORAGE ,
262204 Manifest .permission.WRITE_EXTERNAL_STORAGE
263- ),
264- object : BaseActivity .PermissionCallback () {
265- override fun granted () {
266- activityFinish()
267- Share2 .Builder (context as Activity )
268- .setContentType(ShareContentType .FILE )
269- .setShareFileUri(uri)
270- .setOnActivityResult(10 )
271- .build()
272- .shareBySystem()
273- }
205+ ), object : BaseActivity .PermissionCallback () {
206+ override fun granted () {
207+ activityFinish()
208+ Share2 .Builder (context as Activity ).setContentType(ShareContentType .FILE )
209+ .setShareFileUri(uri).setOnActivityResult(10 ).build().shareBySystem()
210+ }
274211
275- })
212+ })
276213
277214 }
278215 }
@@ -292,11 +229,8 @@ class AppSettingView: ScrollView {
292229 }
293230
294231 private fun showNotice (msg : String , listener : DialogInterface .OnClickListener ) {
295- AlertDialog .Builder (context)
296- .setTitle(R .string.notice)
297- .setMessage(msg)
298- .setNegativeButton(R .string.cancel, null )
299- .setPositiveButton(R .string.ok, listener)
232+ AlertDialog .Builder (context).setTitle(R .string.notice).setMessage(msg)
233+ .setNegativeButton(R .string.cancel, null ).setPositiveButton(R .string.ok, listener)
300234 .create().show()
301235 }
302236}
0 commit comments