@@ -7,6 +7,7 @@ import android.view.Menu
77import android.view.MenuItem
88import com.simplemobiletools.commons.dialogs.FilePickerDialog
99import com.simplemobiletools.commons.extensions.*
10+ import com.simplemobiletools.commons.helpers.ensureBackgroundThread
1011import com.simplemobiletools.commons.helpers.isOreoPlus
1112import com.simplemobiletools.filemanager.pro.R
1213import com.simplemobiletools.filemanager.pro.adapters.DecompressItemsAdapter
@@ -33,11 +34,8 @@ class DecompressActivity : SimpleActivity() {
3334
3435 try {
3536 val listItems = getListItems(uri)
36- DecompressItemsAdapter (this , listItems, decompress_list) {
37-
38- }.apply {
39- decompress_list.adapter = this
40- }
37+ val adapter = DecompressItemsAdapter (this , listItems, decompress_list) { }
38+ decompress_list.adapter = adapter
4139 } catch (e: Exception ) {
4240 showErrorToast(e)
4341 }
@@ -59,8 +57,46 @@ class DecompressActivity : SimpleActivity() {
5957
6058 private fun decompressFiles () {
6159 val defaultFolder = getRealPathFromURI(intent.data!! ) ? : internalStoragePath
62- FilePickerDialog (this , defaultFolder, false , config.showHidden, true , true ) {
60+ FilePickerDialog (this , defaultFolder, false , config.showHidden, true , true ) { destination ->
61+ handleSAFDialog(destination) {
62+ if (it) {
63+ ensureBackgroundThread {
64+ decompressTo(destination)
65+ }
66+ }
67+ }
68+ }
69+ }
70+
71+ private fun decompressTo (destination : String ) {
72+ try {
73+ val inputStream = contentResolver.openInputStream(intent.data!! )
74+ val zipInputStream = ZipInputStream (BufferedInputStream (inputStream!! ))
75+ val buffer = ByteArray (1024 )
6376
77+ zipInputStream.use {
78+ while (true ) {
79+ val entry = zipInputStream.nextEntry ? : break
80+ val newPath = " $destination /${entry.name} "
81+ val fos = getFileOutputStreamSync(newPath, newPath.getMimeType())
82+
83+ var count: Int
84+ while (true ) {
85+ count = zipInputStream.read(buffer)
86+ if (count == - 1 ) {
87+ break
88+ }
89+
90+ fos!! .write(buffer, 0 , count)
91+ }
92+ fos!! .close()
93+ }
94+
95+ toast(R .string.decompression_successful)
96+ finish()
97+ }
98+ } catch (e: Exception ) {
99+ showErrorToast(e)
64100 }
65101 }
66102
0 commit comments