Merge "Remove internal display related methods"
diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp
index 4ed1c8e..44fb6b3 100644
--- a/cmds/screencap/screencap.cpp
+++ b/cmds/screencap/screencap.cpp
@@ -45,17 +45,23 @@
 #define COLORSPACE_SRGB       1
 #define COLORSPACE_DISPLAY_P3 2
 
-static void usage(const char* pname, DisplayId displayId)
+static void usage(const char* pname, std::optional<PhysicalDisplayId> displayId)
 {
+    std::string defaultDisplayStr = "";
+    if (!displayId) {
+        defaultDisplayStr = "";
+    } else {
+        defaultDisplayStr = " (default: " + to_string(*displayId) + ")";
+    }
     fprintf(stderr,
             "usage: %s [-hp] [-d display-id] [FILENAME]\n"
             "   -h: this message\n"
             "   -p: save the file as a png.\n"
-            "   -d: specify the display ID to capture (default: %s)\n"
+            "   -d: specify the display ID to capture%s\n"
             "       see \"dumpsys SurfaceFlinger --display-id\" for valid display IDs.\n"
             "If FILENAME ends with .png it will be saved as a png.\n"
             "If FILENAME is not given, the results will be printed to stdout.\n",
-            pname, to_string(displayId).c_str());
+            pname, defaultDisplayStr.c_str());
 }
 
 static int32_t flinger2bitmapFormat(PixelFormat f)
@@ -121,12 +127,12 @@
 
 int main(int argc, char** argv)
 {
-    std::optional<DisplayId> displayId = SurfaceComposerClient::getInternalDisplayId();
-    if (!displayId) {
-        fprintf(stderr, "Failed to get ID for internal display\n");
+    const std::vector<PhysicalDisplayId> ids = SurfaceComposerClient::getPhysicalDisplayIds();
+    if (ids.empty()) {
+        fprintf(stderr, "Failed to get ID for any displays.\n");
         return 1;
     }
-
+    std::optional<PhysicalDisplayId> displayId;
     const char* pname = argv[0];
     bool png = false;
     int c;
@@ -136,18 +142,32 @@
                 png = true;
                 break;
             case 'd':
-                displayId = DisplayId::fromValue(atoll(optarg));
+                displayId = DisplayId::fromValue<PhysicalDisplayId>(atoll(optarg));
                 if (!displayId) {
-                    fprintf(stderr, "Invalid display ID\n");
+                    fprintf(stderr, "Invalid display ID: %s\n", optarg);
                     return 1;
                 }
                 break;
             case '?':
             case 'h':
-                usage(pname, *displayId);
+                if (ids.size() == 1) {
+                    displayId = ids.front();
+                } 
+                usage(pname, displayId);
                 return 1;
         }
     }
+
+    if (!displayId) { // no diplsay id is specified
+        if (ids.size() == 1) {
+            displayId = ids.front();
+        } else {
+            fprintf(stderr, "Please specify a display ID (-d display-id) for multi-display device.\n");
+            fprintf(stderr, "See \"dumpsys SurfaceFlinger --display-id\" for valid display IDs.\n");
+            return 1;
+        }
+    }
+
     argc -= optind;
     argv += optind;
 
@@ -169,7 +189,7 @@
     }
 
     if (fd == -1) {
-        usage(pname, *displayId);
+        usage(pname, displayId);
         return 1;
     }