login: Configure login_manager to determine stylus info at runtime

BUG=b:124230002
CQ-DEPEND=CL:1509680
TEST=Validate that various SKUs have the correct stylus information

Change-Id: Ic98adc6a8fad21609646e5be3ce437154c564ae2
Reviewed-on: https://chromium-review.googlesource.com/1532850
Commit-Ready: Kartik Hegde <khegde@chromium.org>
Tested-by: Kartik Hegde <khegde@chromium.org>
Reviewed-by: Kartik Hegde <khegde@chromium.org>
(cherry picked from commit 19bd8468262943ff6c312a921302fd80090fe749)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/1565838
Reviewed-by: Philip Chen <philipchen@chromium.org>
Commit-Queue: Philip Chen <philipchen@chromium.org>
Tested-by: Philip Chen <philipchen@chromium.org>
diff --git a/login_manager/chrome_setup.cc b/login_manager/chrome_setup.cc
index 190b97c..2986dcb 100644
--- a/login_manager/chrome_setup.cc
+++ b/login_manager/chrome_setup.cc
@@ -44,6 +44,9 @@
 const char kPowerButtonEdgeField[] = "edge";
 const char kPowerButtonPositionField[] = "position";
 
+const char kStylusCategoryPath[] = "/hardware-properties";
+const char kStylusCategoryField[] = "stylus-category";
+
 // These hashes are only being used temporarily till we can determine if a
 // device is a Chromebox for Meetings or not from the Install Time attributes.
 // TODO(rkc, pbos): Remove these and related code once crbug.com/706523 is
@@ -388,8 +391,6 @@
     builder->AddArg("--aura-legacy-power-button");
   if (builder->UseFlagIsSet("touchview"))
     builder->AddArg("--enable-touchview");
-  if (builder->UseFlagIsSet("internal_stylus"))
-    builder->AddArg("--has-internal-stylus");
   if (builder->UseFlagIsSet("touchscreen_wakeup"))
     builder->AddArg("--touchscreen-usable-while-screen-off");
   if (builder->UseFlagIsSet("oobe_skip_to_login"))
@@ -424,6 +425,8 @@
   SetUpPowerButtonPositionFlag(builder, cros_config);
 
   SetUpRegulatoryLabelFlag(builder, cros_config);
+
+  SetUpInternalStylusFlag(builder, cros_config);
 }
 
 // Adds enterprise-related flags to the command line.
@@ -512,6 +515,17 @@
   AddWallpaperFlags(builder, "default", "default", path_exists);
 }
 
+void SetUpInternalStylusFlag(ChromiumCommandBuilder* builder,
+                             brillo::CrosConfigInterface* cros_config) {
+  std::string stylus_category;
+  if (cros_config &&
+      cros_config->GetString(kStylusCategoryPath, kStylusCategoryField,
+                             &stylus_category) &&
+      stylus_category == "internal") {
+    builder->AddArg("--has-internal-stylus");
+  }
+}
+
 void SetUpPowerButtonPositionFlag(ChromiumCommandBuilder* builder,
                                   brillo::CrosConfigInterface* cros_config) {
   std::string edge_as_string, position_as_string;
diff --git a/login_manager/chrome_setup.h b/login_manager/chrome_setup.h
index 1c43766..2f35e55 100644
--- a/login_manager/chrome_setup.h
+++ b/login_manager/chrome_setup.h
@@ -84,6 +84,11 @@
 void SetUpPowerButtonPositionFlag(chromeos::ui::ChromiumCommandBuilder* builder,
                                   brillo::CrosConfigInterface* cros_config);
 
+// Add "--has-internal-stylus" flag if the device has
+// an internal stylus.
+void SetUpInternalStylusFlag(chromeos::ui::ChromiumCommandBuilder* builder,
+                             brillo::CrosConfigInterface* cros_config);
+
 }  // namespace login_manager
 
 #endif  // LOGIN_MANAGER_CHROME_SETUP_H_