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

Commit 6688e62e authored by Abhijeet Kaur's avatar Abhijeet Kaur
Browse files

Refactor bugreport files creation and getfd methods

Handle Exceptions around file creation/open fd more gracefully inside
BugreportInfo class. This is communicated to the caller of BugreportInfo
by returning null for getFd() methods.

Test: builds

Change-Id: Ie241dce0810645e04b2492dc8b1bcbc3e9f8f664
parent c228e1d8
Loading
Loading
Loading
Loading
+27 −28
Original line number Diff line number Diff line
@@ -606,26 +606,21 @@ public class BugreportProgressService extends Service {

        BugreportInfo info = new BugreportInfo(mContext, baseName, name,
                shareTitle, shareDescription, bugreportType, mBugreportsDir);
        ParcelFileDescriptor bugreportFd;
        ParcelFileDescriptor screenshotFd;

        try {
            bugreportFd = info.createAndGetBugreportFd();
        ParcelFileDescriptor bugreportFd = info.getBugreportFd();
        if (bugreportFd == null) {
                Log.e(TAG, "Bugreport parcel file descriptor is null.");
            Log.e(TAG, "Failed to start bugreport generation as "
                    + " bugreport parcel file descriptor is null.");
            return;
        }
            screenshotFd = info.createAndGetDefaultScreenshotFd();
        ParcelFileDescriptor screenshotFd = info.getDefaultScreenshotFd();
        if (screenshotFd == null) {
                Log.e(TAG, "Screenshot parcel file descriptor is null. Deleting bugreport file");
            Log.e(TAG, "Failed to start bugreport generation as"
                    + " screenshot parcel file descriptor is null. Deleting bugreport file");
            FileUtils.closeQuietly(bugreportFd);
            info.bugreportFile.delete();
            return;
        }
        } catch (IOException e) {
            Log.e(TAG, "Error in generating bugreport files: ", e);
            return;
        }

        mBugreportManager = (BugreportManager) mContext.getSystemService(
                Context.BUGREPORT_SERVICE);
        final Executor executor = ActivityThread.currentActivityThread().getExecutor();
@@ -639,7 +634,7 @@ public class BugreportProgressService extends Service {
            mBugreportManager.startBugreport(bugreportFd, screenshotFd,
                    new BugreportParams(bugreportType), executor, bugreportCallback);
        } catch (RuntimeException e) {
            Log.i(TAG, "error in generating bugreports: ", e);
            Log.i(TAG, "Error in generating bugreports: ", e);
            // The binder call didn't go through successfully, so need to close the fds.
            // If the calls went through API takes ownership.
            FileUtils.closeQuietly(bugreportFd);
@@ -657,12 +652,16 @@ public class BugreportProgressService extends Service {
        return null;
    }

    private static void createReadWriteFile(File file) throws IOException {
    private static void createReadWriteFile(File file) {
        try {
            if (!file.exists()) {
                file.createNewFile();
                file.setReadable(true, true);
                file.setWritable(true, true);
            }
        } catch (IOException e) {
            Log.e(TAG, "Error in creating bugreport file: ", e);
        }
    }

    /**
@@ -1836,23 +1835,23 @@ public class BugreportProgressService extends Service {

        void createBugreportFile(File bugreportsDir) {
            bugreportFile = new File(bugreportsDir, getFileName(this, ".zip"));
            createReadWriteFile(bugreportFile);
        }

        void createScreenshotFile(File bugreportsDir) {
            File screenshotFile = new File(bugreportsDir, getScreenshotName("default"));
            addScreenshot(screenshotFile);
            createReadWriteFile(screenshotFile);
        }

        ParcelFileDescriptor createAndGetBugreportFd() throws IOException {
            createReadWriteFile(bugreportFile);
        ParcelFileDescriptor getBugreportFd() {
            return getFd(bugreportFile);
        }

        ParcelFileDescriptor createAndGetDefaultScreenshotFd() throws IOException {
        ParcelFileDescriptor getDefaultScreenshotFd() {
            if (screenshotFiles.isEmpty()) {
                return null;
            }
            createReadWriteFile(screenshotFiles.get(0));
            return getFd(screenshotFiles.get(0));
        }