Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcb55902 authored by Felipe Leme's avatar Felipe Leme Committed by Android (Google) Code Review
Browse files

Merge "Improved zipping logic so it zips chunks, instead of the whole file at...

Merge "Improved zipping logic so it zips chunks, instead of the whole file at once, to avoid OOM." into mnc-dev
parents f24bed80 00f4a6ec
Loading
Loading
Loading
Loading
+5 −23
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.util.Log;
import android.util.Patterns;

import com.google.android.collect.Lists;
import libcore.io.Streams;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
@@ -191,20 +192,17 @@ public class BugreportReceiver extends BroadcastReceiver {
     * original in case of failure).
     */
    private static File zipBugreport(File bugreportFile) {
        byte[] bytes = read(bugreportFile);
        if (bytes == null) {
            // Could not read bugreport, return original.
            return bugreportFile;
        }
        String bugreportPath = bugreportFile.getAbsolutePath();
        String zippedPath = bugreportPath.replace(".txt", ".zip");
        Log.v(TAG, "zipping " + bugreportPath + " as " + zippedPath);
        File bugreportZippedFile = new File(zippedPath);
        try (ZipOutputStream zos = new ZipOutputStream(
        try (InputStream is = new FileInputStream(bugreportFile);
            ZipOutputStream zos = new ZipOutputStream(
                new BufferedOutputStream(new FileOutputStream(bugreportZippedFile)))) {
            ZipEntry entry = new ZipEntry("bugreport.txt");
            zos.putNextEntry(entry);
            zos.write(bytes);
            int totalBytes = Streams.copy(is, zos);
            Log.v(TAG, "size of original bugreport: " + totalBytes + " bytes");
            zos.closeEntry();
            // Delete old file;
            boolean deleted = bugreportFile.delete();
@@ -220,22 +218,6 @@ public class BugreportReceiver extends BroadcastReceiver {
        }
    }

    /** Returns the content of file, or {@code null} in case of error. */
    private static byte[] read(File file) {
        try (ByteArrayOutputStream output = new ByteArrayOutputStream();
             InputStream input = new FileInputStream(file)) {
            byte[] buffer = new byte[4096];
            int read = 0;
            while ((read = input.read(buffer)) != -1) {
              output.write(buffer, 0, read);
            }
            return output.toByteArray();
        } catch (IOException e) {
            Log.e(TAG, "IOException reading " + file.getAbsolutePath(), e);
            return null;
        }
    }

    /**
     * Find the best matching {@link Account} based on build properties.
     */