From 46ab985f41923f946057b2c3a6aa5688f022368c Mon Sep 17 00:00:00 2001 From: Paul Chang Date: Wed, 26 Feb 2020 18:13:47 +0800 Subject: [PATCH] Clean up code of starting bug report - Let screenshot fd be null if Shell doesn't want to take default screenshot when bug report is triggered. BUG:149525300 Test: Flash and test interactive/full bugreports generated using Shell, and Shell flow does not break during tests Change-Id: I50908af63d74ed66156354ec0b5a237f7131061a Merged-In: I50908af63d74ed66156354ec0b5a237f7131061a --- .../shell/BugreportProgressService.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java index d126ee0955ea7..c76b50bd4e9c0 100644 --- a/packages/Shell/src/com/android/shell/BugreportProgressService.java +++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java @@ -615,13 +615,16 @@ public class BugreportProgressService extends Service { + " bugreport parcel file descriptor is null."); return; } - ParcelFileDescriptor screenshotFd = info.getDefaultScreenshotFd(); - if (screenshotFd == null) { - 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; + ParcelFileDescriptor screenshotFd = null; + if (isDefaultScreenshotRequired(bugreportType)) { + screenshotFd = info.getDefaultScreenshotFd(); + if (screenshotFd == null) { + 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; + } } mBugreportManager = (BugreportManager) mContext.getSystemService( @@ -641,10 +644,20 @@ public class BugreportProgressService extends Service { // 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); - FileUtils.closeQuietly(screenshotFd); + if (screenshotFd != null) { + FileUtils.closeQuietly(screenshotFd); + } } } + private static boolean isDefaultScreenshotRequired( + @BugreportParams.BugreportMode int bugreportType) { + // Modify dumpstate#SetOptionsFromMode as well for default system screenshots. + // We override dumpstate for interactive bugreports. + return bugreportType == BugreportParams.BUGREPORT_MODE_FULL + || bugreportType == BugreportParams.BUGREPORT_MODE_WEAR; + } + private static ParcelFileDescriptor getFd(File file) { try { return ParcelFileDescriptor.open(file,