From 72a10cc91716286cd837e654750ae550f8a673ad Mon Sep 17 00:00:00 2001
From: tibbi <tibor@kaputa.sk>
Date: Tue, 26 May 2020 15:33:07 +0200
Subject: [PATCH] adding an initial version of the decompressing activity

---
 app/src/main/AndroidManifest.xml              | 10 +++
 .../pro/activities/DecompressActivity.kt      | 64 +++++++++++++++++++
 .../filemanager/pro/adapters/ItemsAdapter.kt  |  2 +-
 .../filemanager/pro/models/ListItem.kt        |  3 +-
 .../main/res/layout/activity_decompress.xml   | 16 +++++
 5 files changed, 92 insertions(+), 3 deletions(-)
 create mode 100644 app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/DecompressActivity.kt
 create mode 100644 app/src/main/res/layout/activity_decompress.xml

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9debad79..09bee2d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -73,6 +73,16 @@
             </intent-filter>
         </activity>
 
+        <activity
+            android:name=".activities.DecompressActivity"
+            android:label="@string/decompress">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+                <data android:mimeType="application/zip" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <activity
             android:name=".activities.SettingsActivity"
             android:label="@string/settings"
diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/DecompressActivity.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/DecompressActivity.kt
new file mode 100644
index 00000000..e542dfad
--- /dev/null
+++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/DecompressActivity.kt
@@ -0,0 +1,64 @@
+package com.simplemobiletools.filemanager.pro.activities
+
+import android.annotation.SuppressLint
+import android.net.Uri
+import android.os.Bundle
+import com.simplemobiletools.commons.extensions.getFilenameFromPath
+import com.simplemobiletools.commons.extensions.getRealPathFromURI
+import com.simplemobiletools.commons.extensions.showErrorToast
+import com.simplemobiletools.commons.extensions.toast
+import com.simplemobiletools.commons.helpers.isOreoPlus
+import com.simplemobiletools.filemanager.pro.R
+import com.simplemobiletools.filemanager.pro.adapters.ItemsAdapter
+import com.simplemobiletools.filemanager.pro.models.ListItem
+import kotlinx.android.synthetic.main.activity_decompress.*
+import java.io.BufferedInputStream
+import java.util.zip.ZipEntry
+import java.util.zip.ZipInputStream
+
+class DecompressActivity : SimpleActivity() {
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_decompress)
+        val uri = intent.data
+        if (uri == null) {
+            toast(R.string.unknown_error_occurred)
+            return
+        }
+
+        getRealPathFromURI(uri)?.apply {
+            title = getFilenameFromPath()
+        }
+
+        try {
+            val listItems = getListItems(uri)
+            ItemsAdapter(this, listItems, null, decompress_list, false, null) {
+            }.apply {
+                decompress_list.adapter = this
+            }
+        } catch (e: Exception) {
+            showErrorToast(e)
+        }
+    }
+
+    @SuppressLint("NewApi")
+    private fun getListItems(uri: Uri): ArrayList<ListItem> {
+        val listItems = ArrayList<ListItem>()
+        val inputStream = contentResolver.openInputStream(uri)
+        val zipInputStream = ZipInputStream(BufferedInputStream(inputStream))
+        var zipEntry: ZipEntry?
+        while (true) {
+            zipEntry = zipInputStream.nextEntry
+
+            if (zipEntry == null) {
+                break
+            }
+
+            val lastModified = if (isOreoPlus()) zipEntry.lastModifiedTime.toMillis() else 0
+            val listItem = ListItem(zipEntry.name, zipEntry.name, zipEntry.isDirectory, 0, 0L, lastModified, false)
+            listItems.add(listItem)
+        }
+        return listItems
+    }
+}
diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/adapters/ItemsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/adapters/ItemsAdapter.kt
index a89ada59..53a38fc5 100644
--- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/adapters/ItemsAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/adapters/ItemsAdapter.kt
@@ -49,7 +49,7 @@ import java.util.zip.ZipFile
 import java.util.zip.ZipOutputStream
 
 class ItemsAdapter(activity: SimpleActivity, var listItems: MutableList<ListItem>, val listener: ItemOperationsListener?, recyclerView: MyRecyclerView,
-                   val isPickMultipleIntent: Boolean, fastScroller: FastScroller, itemClick: (Any) -> Unit) :
+                   val isPickMultipleIntent: Boolean, fastScroller: FastScroller?, itemClick: (Any) -> Unit) :
         MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
 
     private val TYPE_FILE_DIR = 1
diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/models/ListItem.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/models/ListItem.kt
index 878207a2..00ab9431 100644
--- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/models/ListItem.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/models/ListItem.kt
@@ -3,5 +3,4 @@ package com.simplemobiletools.filemanager.pro.models
 import com.simplemobiletools.commons.models.FileDirItem
 
 data class ListItem(val mPath: String, val mName: String = "", var mIsDirectory: Boolean = false, var mChildren: Int = 0, var mSize: Long = 0L, var mModified: Long = 0L,
-                    var isSectionTitle: Boolean)
-    : FileDirItem(mPath, mName, mIsDirectory, mChildren, mSize, mModified)
+                    var isSectionTitle: Boolean) : FileDirItem(mPath, mName, mIsDirectory, mChildren, mSize, mModified)
diff --git a/app/src/main/res/layout/activity_decompress.xml b/app/src/main/res/layout/activity_decompress.xml
new file mode 100644
index 00000000..46489bde
--- /dev/null
+++ b/app/src/main/res/layout/activity_decompress.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/decompress_wrapper"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <com.simplemobiletools.commons.views.MyRecyclerView
+        android:id="@+id/decompress_list"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:clipToPadding="false"
+        android:scrollbars="none"
+        app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
+
+</RelativeLayout>