@@ -8,6 +8,7 @@ import android.util.AttributeSet
88import android.view.LayoutInflater
99import android.widget.ScrollView
1010import androidx.appcompat.app.AlertDialog
11+ import androidx.fragment.app.FragmentActivity
1112import com.wrbug.developerhelper.BuildConfig
1213import com.wrbug.developerhelper.R
1314import com.wrbug.developerhelper.basecommon.BaseActivity
@@ -19,6 +20,7 @@ import com.wrbug.developerhelper.commonutil.toUri
1920import com.wrbug.developerhelper.commonutil.zip
2021import com.wrbug.developerhelper.commonwidget.util.setOnRootCheckClickListener
2122import com.wrbug.developerhelper.commonwidget.util.visible
23+ import com.wrbug.developerhelper.databinding.DialogBackupAppSelectBinding
2224import com.wrbug.developerhelper.databinding.ViewAppSettingBinding
2325import com.wrbug.developerhelper.mmkv.ConfigKv
2426import com.wrbug.developerhelper.mmkv.manager.MMKVManager
@@ -54,12 +56,13 @@ class AppSettingView : ScrollView {
5456 }
5557
5658 private fun initListener () {
57- binding.backupApkBtn.setOnRootCheckClickListener {
58- doBackupApk()
59- }
60- binding.backupApkDataDirBtn.setOnRootCheckClickListener {
61- doBackupDataDir()
59+ binding.backupAppBtn.setOnRootCheckClickListener {
60+ showBackSelect()
61+ // doBackupApk()
6262 }
63+ // binding.backupApkDataDirBtn.setOnRootCheckClickListener {
64+ // doBackupDataDir()
65+ // }
6366 binding.restartAppBtn.setOnRootCheckClickListener {
6467 doRestartApp()
6568 }
@@ -74,6 +77,43 @@ class AppSettingView : ScrollView {
7477 }
7578 }
7679
80+ private fun showBackSelect () {
81+ val selected = booleanArrayOf(false , false , false )
82+ val binding = DialogBackupAppSelectBinding .inflate(LayoutInflater .from(context))
83+ binding.cbApk.setOnCheckedChangeListener { _, isChecked ->
84+ selected[0 ] = isChecked
85+ }
86+ binding.cbData.setOnCheckedChangeListener { _, isChecked ->
87+ selected[1 ] = isChecked
88+ }
89+ binding.cbAndroidData.setOnCheckedChangeListener { _, isChecked ->
90+ selected[2 ] = isChecked
91+ }
92+ AlertDialog .Builder (context)
93+ .setTitle(R .string.backup_app_file)
94+ .setView(binding.root)
95+ .setNegativeButton(R .string.cancel, null )
96+ .setPositiveButton(
97+ R .string.ok
98+ ) { _, _ ->
99+ doBackup(selected)
100+ }.create().show()
101+ }
102+
103+ private fun doBackup (selected : BooleanArray ) {
104+ val activity = context as ? FragmentActivity ? : return
105+ if (selected.find { it } == null ) {
106+ return
107+ }
108+ BackupAppDialog .show(
109+ activity.supportFragmentManager,
110+ apkInfo,
111+ selected[0 ],
112+ selected[1 ],
113+ selected[2 ]
114+ )
115+ }
116+
77117 private fun doUninstallApp () {
78118 apkInfo?.apply {
79119 AppManagerUtils .uninstallApp(context, applicationInfo.packageName)
@@ -124,80 +164,6 @@ class AppSettingView : ScrollView {
124164 }
125165 }
126166
127- private fun doBackupDataDir () {
128- if (checkRoot().not ()) {
129- return
130- }
131- apkInfo?.apply {
132- val backupAppData = BackupUtils .backupAppData(applicationInfo.packageName)
133- if (backupAppData == null ) {
134- showToast(context.getString(R .string.backup_failed))
135- return
136- }
137- if (context !is BaseActivity ) {
138- showToast(context.getString(R .string.backup_success_msg))
139- return
140- }
141- showShareDataNotice(backupAppData)
142- }
143- }
144-
145- private fun showShareDataNotice (backupAppData : File ) {
146- showNotice(context.getString(R .string.backup_success_and_share_msg)) {
147- (context as BaseActivity ).requestPermission(arrayOf(Manifest .permission.READ_EXTERNAL_STORAGE ),
148- object : BaseActivity .PermissionCallback () {
149- override fun granted () {
150- val zipFile = File (
151- context.externalCacheDir, " ${apkInfo?.getAppName() ? : " " } -data.zip"
152- )
153- backupAppData.zip(zipFile)
154- val uri = zipFile.toUri(context)
155- if (uri == null ) {
156- showToast(context.getString(R .string.share_failed))
157- return
158- }
159- activityFinish()
160- Share2 .Builder (context as Activity ).setContentType(ShareContentType .FILE )
161- .setShareFileUri(uri).setOnActivityResult(10 ).build().shareBySystem()
162- }
163-
164- })
165-
166- }
167- }
168-
169- private fun doBackupApk () {
170- if (checkRoot().not ()) {
171- return
172- }
173- context.requestStoragePermission {
174- apkInfo?.apply {
175- val uri = BackupUtils .backupApk(
176- applicationInfo.packageName,
177- applicationInfo.publicSourceDir,
178- " ${getAppName()} _${packageInfo.versionName} .apk"
179- )
180- if (uri == null ) {
181- showToast(context.getString(R .string.backup_failed))
182- return @apply
183- }
184- if (context !is BaseActivity ) {
185- showToast(context.getString(R .string.backup_success_msg))
186- return @apply
187- }
188- showShareApkDialog(uri)
189- }
190- }
191- }
192-
193- private fun showShareApkDialog (uri : Uri ) {
194- showNotice(context.getString(R .string.backup_success_and_share_msg)) {
195- activityFinish()
196- Share2 .Builder (context as Activity ).setContentType(ShareContentType .FILE )
197- .setShareFileUri(uri).setOnActivityResult(10 ).build().shareBySystem()
198- }
199- }
200-
201167 private fun checkRoot (): Boolean {
202168 if (configKv.isOpenRoot().not ()) {
203169 showToast(context.getString(R .string.please_open_root))
0 commit comments