Lite bugreports(wifi/telephony) don't need screenshots
Set do_fb to false for lite bugreports to not take screenshots.
Also, add a nonempty check for screenshot files before broadcasting to
notification. This way while sharing or uploading to drive/gmail by
clicking the "Share" button would not show empty file (Not able to
upload) error.
Update unit tests to check for do_fb set to false for wifi/telephony.
Bug: 128546970
Test: Manually take a wifi bugreport:
* adb root
* adb shell setprop dumpstate.options bugreportwifi
* adb shell dumpstate
* share bugreport from the notification to the drive
* No upload failures (previously screenshot would show "Upload was
unsuccessful" notification.)
Test:
* adb shell mkdir /data/nativetest64
* mmm -j frameworks/native/cmds/dumpstate/ &&
adb push ${OUT}/data/nativetest64/dumpstate_test* /data/nativetest64
&& adb shell /data/nativetest64/dumpstate_test/dumpstate_test &&
printf "\n\n#### ALL TESTS PASSED ####\n"
Change-Id: I0d2fe2a64f91dee7d090d5f8353e86d51ed5fb94
diff --git a/cmds/dumpstate/dumpstate.cpp b/cmds/dumpstate/dumpstate.cpp
index 51b2307..a66a8c1 100644
--- a/cmds/dumpstate/dumpstate.cpp
+++ b/cmds/dumpstate/dumpstate.cpp
@@ -34,6 +34,7 @@
#include <unistd.h>
#include <chrono>
+#include <fstream>
#include <functional>
#include <future>
#include <memory>
@@ -181,6 +182,15 @@
return true;
}
+static bool IsFileEmpty(const std::string& file_path) {
+ std::ifstream file(file_path, std::ios::binary | std::ios::ate);
+ if(file.bad()) {
+ MYLOGE("Cannot open file: %s\n", file_path.c_str());
+ return true;
+ }
+ return file.tellg() <= 0;
+}
+
} // namespace
} // namespace os
} // namespace android
@@ -2085,7 +2095,7 @@
"--es", "android.intent.extra.DUMPSTATE_LOG", ds.log_path_
};
// clang-format on
- if (ds.options_->do_fb) {
+ if (ds.options_->do_fb && !android::os::IsFileEmpty(ds.screenshot_path_)) {
am_args.push_back("--es");
am_args.push_back("android.intent.extra.SCREENSHOT");
am_args.push_back(ds.screenshot_path_);
@@ -2161,13 +2171,13 @@
break;
case Dumpstate::BugreportMode::BUGREPORT_TELEPHONY:
options->telephony_only = true;
- options->do_fb = true;
+ options->do_fb = false;
options->do_broadcast = true;
break;
case Dumpstate::BugreportMode::BUGREPORT_WIFI:
options->wifi_only = true;
options->do_zip_file = true;
- options->do_fb = true;
+ options->do_fb = false;
options->do_broadcast = true;
break;
case Dumpstate::BugreportMode::BUGREPORT_DEFAULT: