diff options
| -rw-r--r-- | core/java/android/os/BugreportManager.java | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/core/java/android/os/BugreportManager.java b/core/java/android/os/BugreportManager.java index 83e19803a63b..3cdebac413f9 100644 --- a/core/java/android/os/BugreportManager.java +++ b/core/java/android/os/BugreportManager.java @@ -26,12 +26,14 @@ import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; import android.content.Context; +import android.util.Log; import com.android.internal.util.Preconditions; import libcore.io.IoUtils; -import java.io.FileDescriptor; +import java.io.File; +import java.io.FileNotFoundException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.concurrent.Executor; @@ -45,6 +47,9 @@ import java.util.concurrent.Executor; @TestApi @SystemService(Context.BUGREPORT_SERVICE) public final class BugreportManager { + + private static final String TAG = "BugreportManager"; + private final Context mContext; private final IDumpstate mBinder; @@ -149,16 +154,22 @@ public final class BugreportManager { Preconditions.checkNotNull(executor); Preconditions.checkNotNull(callback); + if (screenshotFd == null) { + // Binder needs a valid File Descriptor to be passed + screenshotFd = ParcelFileDescriptor.open(new File("/dev/null"), + ParcelFileDescriptor.MODE_READ_ONLY); + } DumpstateListener dsListener = new DumpstateListener(executor, callback); // Note: mBinder can get callingUid from the binder transaction. mBinder.startBugreport(-1 /* callingUid */, mContext.getOpPackageName(), bugreportFd.getFileDescriptor(), - (screenshotFd != null - ? screenshotFd.getFileDescriptor() : new FileDescriptor()), + screenshotFd.getFileDescriptor(), params.getMode(), dsListener); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); + } catch (FileNotFoundException e) { + Log.wtf(TAG, "Not able to find /dev/null file: ", e); } finally { // We can close the file descriptors here because binder would have duped them. IoUtils.closeQuietly(bugreportFd); |