Set "WiFi discovery" bit of device flags according state of Hosted SSID.
Return true only if device is hosting AP or if flags are being generated
for SSID.

BUG:25597839
Change-Id: Idca4f3dbb915e7af0375832260f8280a6b7b08b1
Reviewed-on: https://weave-review.googlesource.com/1529
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/src/privet/wifi_ssid_generator.cc b/src/privet/wifi_ssid_generator.cc
index a049c20..697e5d8 100644
--- a/src/privet/wifi_ssid_generator.cc
+++ b/src/privet/wifi_ssid_generator.cc
@@ -52,6 +52,10 @@
 }
 
 std::string WifiSsidGenerator::GenerateFlags() const {
+  return GenerateFlagsInternal(false);
+}
+
+std::string WifiSsidGenerator::GenerateFlagsInternal(bool for_ssid) const {
   std::bitset<6> flags1;
   // Device needs WiFi configuration.
   flags1[0] = wifi_ && IsSetupNeeded(wifi_->GetConnectionState());
@@ -59,8 +63,9 @@
   flags1[1] = IsSetupNeeded(gcd_->GetConnectionState());
 
   std::bitset<6> flags2;
+
   // Device is discoverable over WiFi.
-  flags2[0] = true;
+  flags2[0] = for_ssid || (wifi_ && !wifi_->GetHostedSsid().empty());
 
   std::string result{2, base64chars[0]};
   result[0] = base64chars[flags1.to_ulong()];
@@ -77,7 +82,7 @@
 
   std::string result =
       base::StringPrintf(kSsidFormat, name.c_str(), idx.c_str(),
-                         model_id.c_str(), GenerateFlags().c_str());
+                         model_id.c_str(), GenerateFlagsInternal(true).c_str());
   CHECK_EQ(result[result.size() - 11], '.');
   return result;
 }
diff --git a/src/privet/wifi_ssid_generator.h b/src/privet/wifi_ssid_generator.h
index d720fb5..2b86f28 100644
--- a/src/privet/wifi_ssid_generator.h
+++ b/src/privet/wifi_ssid_generator.h
@@ -30,6 +30,7 @@
 
   // Sets object to use |n| instead of random number for SSID generation.
   void SetRandomForTests(int n);
+  std::string GenerateFlagsInternal(bool for_ssid) const;
 
   const CloudDelegate* gcd_{nullptr};
   const WifiDelegate* wifi_{nullptr};
diff --git a/src/privet/wifi_ssid_generator_unittest.cc b/src/privet/wifi_ssid_generator_unittest.cc
index 3bd561f..398e105 100644
--- a/src/privet/wifi_ssid_generator_unittest.cc
+++ b/src/privet/wifi_ssid_generator_unittest.cc
@@ -22,7 +22,26 @@
   WifiSsidGenerator ssid_generator_{&gcd_, &wifi_};
 };
 
-TEST_F(WifiSsidGeneratorTest, GenerateFlags) {
+TEST_F(WifiSsidGeneratorTest, GenerateFlagsNoHostedAp) {
+  EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2);
+
+  wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
+  gcd_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
+  EXPECT_EQ("DA", ssid_generator_.GenerateFlags());
+
+  wifi_.connection_state_ = ConnectionState{ConnectionState::kOnline};
+  EXPECT_EQ("CA", ssid_generator_.GenerateFlags());
+
+  gcd_.connection_state_ = ConnectionState{ConnectionState::kOffline};
+  EXPECT_EQ("AA", ssid_generator_.GenerateFlags());
+
+  wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
+  EXPECT_EQ("BA", ssid_generator_.GenerateFlags());
+}
+
+TEST_F(WifiSsidGeneratorTest, GenerateFlagsWithHostedAp) {
+  EXPECT_CALL(wifi_, GetHostedSsid())
+      .WillRepeatedly(Return(ssid_generator_.GenerateSsid()));
   EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2);
 
   wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};