Skip to content

Commit e27841d

Browse files
committed
adding initial implementation of file decompressing
1 parent f76a60d commit e27841d

File tree

1 file changed

+42
-6
lines changed

1 file changed

+42
-6
lines changed

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/DecompressActivity.kt

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.view.Menu
77
import android.view.MenuItem
88
import com.simplemobiletools.commons.dialogs.FilePickerDialog
99
import com.simplemobiletools.commons.extensions.*
10+
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
1011
import com.simplemobiletools.commons.helpers.isOreoPlus
1112
import com.simplemobiletools.filemanager.pro.R
1213
import 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

Comments
 (0)