diff --git a/app/src/main/java/com/amaze/filemanager/asynchronous/services/ZipService.java b/app/src/main/java/com/amaze/filemanager/asynchronous/services/ZipService.java index 5dea9e5fa0..88f097c411 100644 --- a/app/src/main/java/com/amaze/filemanager/asynchronous/services/ZipService.java +++ b/app/src/main/java/com/amaze/filemanager/asynchronous/services/ZipService.java @@ -28,13 +28,15 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; +import android.net.Uri; import android.os.AsyncTask; import android.os.IBinder; import android.preference.PreferenceManager; +import android.widget.RemoteViews; + import androidx.annotation.NonNull; import androidx.annotation.StringRes; import androidx.core.app.NotificationCompat; -import android.widget.RemoteViews; import com.amaze.filemanager.R; import com.amaze.filemanager.activities.MainActivity; @@ -49,16 +51,16 @@ import com.amaze.filemanager.utils.files.FileUtils; import com.amaze.filemanager.utils.files.GenericCopyUtil; -import net.lingala.zip4j.exception.ZipException; -import net.lingala.zip4j.io.ZipOutputStream; -import net.lingala.zip4j.model.ZipParameters; -import net.lingala.zip4j.util.Zip4jConstants; - +import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; +import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipOutputStream; public class ZipService extends AbstractProgressiveService { @@ -263,12 +265,13 @@ public void execute(final @NonNull Context context, ArrayList baseFiles, S progressHandler.setSourceFilesProcessed(++fileProgress); compressFile(file, ""); } - } catch (IOException | ZipException e) { + } catch (IOException e) { e.printStackTrace(); } finally { try { zos.flush(); zos.close(); + context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE).setData(Uri.fromFile(zipDirectory))); } catch (IOException e) { e.printStackTrace(); } @@ -281,11 +284,18 @@ private void compressFile(File file, String path) throws IOException, NullPointe if (!file.isDirectory()) { byte[] buf = new byte[GenericCopyUtil.DEFAULT_BUFFER_SIZE]; int len; - ZipParameters parameters = new ZipParameters(); - parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); - parameters.setFileNameInZip(path + "/" + file.getName()); - zos.putNextEntry(file, parameters); - ServiceWatcherUtil.position += file.length(); + BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); + zos.putNextEntry(new ZipEntry(path + "/" + file.getName())); + try { + while ((len = in.read(buf)) > 0) { + if (!progressHandler.getCancelled()) { + zos.write(buf, 0, len); + ServiceWatcherUtil.position += len; + } else break; + } + } finally { + in.close(); + } return; }