Remove deprecated libweave APIs

With libweave old (commanddef/state) APIs officially deprecated, removed
their usage from weaved. In places when weaved loads legacy command/state
definitions for vendor daemons, this couldn't be done yet, so the
deprecated API warnings were temporary disabled in the make file.

Also removed D-Bus methods/properties to work with the legacy state
snapshot and instead exposed Components/Traits properties out of the daemon.

BUG: 25917706
Change-Id: I328aff526f284dc69560a7bd7907ad838c0365e2
diff --git a/Android.mk b/Android.mk
index 9d75d9d..7ebdf2b 100644
--- a/Android.mk
+++ b/Android.mk
@@ -63,7 +63,9 @@
 LOCAL_MODULE := buffet-common
 LOCAL_CPP_EXTENSION := $(buffetCommonCppExtension)
 LOCAL_CFLAGS := $(buffetCommonCFlags)
-LOCAL_CPPFLAGS := $(buffetCommonCppFlags)
+# TODO(avakulenko): Remove -Wno-deprecated-declarations when legacy libweave
+# APIs are removed (see: b/25917708).
+LOCAL_CPPFLAGS := $(buffetCommonCppFlags) -Wno-deprecated-declarations
 LOCAL_C_INCLUDES := $(buffetCommonCIncludes)
 LOCAL_SHARED_LIBRARIES := $(buffetSharedLibraries)
 LOCAL_STATIC_LIBRARIES :=
diff --git a/buffet/dbus_bindings/com.android.Weave.Manager.dbus-xml b/buffet/dbus_bindings/com.android.Weave.Manager.dbus-xml
index ad26785..ecbb511 100644
--- a/buffet/dbus_bindings/com.android.Weave.Manager.dbus-xml
+++ b/buffet/dbus_bindings/com.android.Weave.Manager.dbus-xml
@@ -23,10 +23,6 @@
       <arg name="property_set" type="a{sv}" direction="in"/>
       <annotation name="org.chromium.DBus.Method.Kind" value="async"/>
     </method>
-    <method name="GetState">
-      <arg name="device_info" type="s" direction="out"/>
-      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
-    </method>
     <method name="AddCommand">
       <arg name="json_command" type="s" direction="in"/>
       <arg name="id" type="s" direction="out"/>
@@ -59,9 +55,14 @@
         GCD ID if the device is registered or empty otherwise.
       </tp:docstring>
     </property>
-    <property name="State" type="s" access="read">
+    <property name="Components" type="s" access="read">
       <tp:docstring>
-        JSON with state of the devices.
+        JSON with device component tree.
+      </tp:docstring>
+    </property>
+    <property name="Traits" type="s" access="read">
+      <tp:docstring>
+        JSON with device trait definitions.
       </tp:docstring>
     </property>
     <property name="OemName" type="s" access="read">
diff --git a/buffet/dbus_command_dispatcher.cc b/buffet/dbus_command_dispatcher.cc
index 2fc39b3..d23d071 100644
--- a/buffet/dbus_command_dispatcher.cc
+++ b/buffet/dbus_command_dispatcher.cc
@@ -30,7 +30,7 @@
     const base::WeakPtr<ExportedObjectManager>& object_manager,
     weave::Device* device)
     : object_manager_{object_manager} {
-  device->AddCommandHandler("",
+  device->AddCommandHandler("", "",
                             base::Bind(&DBusCommandDispacher::OnCommandAdded,
                                        weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 85a9024..4cfa902 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -236,8 +236,15 @@
   command_dispatcher_.reset(
       new DBusCommandDispacher{dbus_object_.GetObjectManager(), device_.get()});
 
+  device_->AddTraitDefsChangedCallback(
+      base::Bind(&Manager::OnTraitDefsChanged,
+                 weak_ptr_factory_.GetWeakPtr()));
   device_->AddStateChangedCallback(
-      base::Bind(&Manager::OnStateChanged, weak_ptr_factory_.GetWeakPtr()));
+      base::Bind(&Manager::OnComponentTreeChanged,
+                 weak_ptr_factory_.GetWeakPtr()));
+  device_->AddComponentTreeChangedCallback(
+      base::Bind(&Manager::OnComponentTreeChanged,
+                 weak_ptr_factory_.GetWeakPtr()));
 
   device_->AddGcdStateChangedCallback(
       base::Bind(&Manager::OnGcdStateChanged, weak_ptr_factory_.GetWeakPtr()));
@@ -315,13 +322,6 @@
   response->Return();
 }
 
-bool Manager::GetState(brillo::ErrorPtr* error, std::string* state) {
-  const base::DictionaryValue& json = device_->GetState();
-  base::JSONWriter::WriteWithOptions(
-      json, base::JSONWriter::OPTIONS_PRETTY_PRINT, state);
-  return true;
-}
-
 void Manager::AddCommand(DBusMethodResponsePtr<std::string> response,
                          const std::string& json_command) {
   std::string error_message;
@@ -352,12 +352,20 @@
   return message;
 }
 
-void Manager::OnStateChanged() {
-  const base::DictionaryValue& state = device_->GetState();
+void Manager::OnTraitDefsChanged() {
+  const base::DictionaryValue& state = device_->GetTraits();
   std::string json;
   base::JSONWriter::WriteWithOptions(
       state, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
-  dbus_adaptor_.SetState(json);
+  dbus_adaptor_.SetTraits(json);
+}
+
+void Manager::OnComponentTreeChanged() {
+  const base::DictionaryValue& state = device_->GetComponents();
+  std::string json;
+  base::JSONWriter::WriteWithOptions(
+      state, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
+  dbus_adaptor_.SetComponents(json);
 }
 
 void Manager::OnGcdStateChanged(weave::GcdState state) {
diff --git a/buffet/manager.h b/buffet/manager.h
index 1dea711..9522340 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -93,7 +93,6 @@
   void UpdateState(DBusMethodResponsePtr<> response,
                    const std::string& component,
                    const brillo::VariantDictionary& property_set) override;
-  bool GetState(brillo::ErrorPtr* error, std::string* state) override;
   void AddCommand(DBusMethodResponsePtr<std::string> response,
                   const std::string& json_command) override;
   std::string TestMethod(const std::string& message) override;
@@ -101,7 +100,8 @@
   void StartPrivet(const Options& options,
                    brillo::dbus_utils::AsyncEventSequencer* sequencer);
 
-  void OnStateChanged();
+  void OnTraitDefsChanged();
+  void OnComponentTreeChanged();
   void OnGcdStateChanged(weave::GcdState state);
   void OnConfigChanged(const weave::Settings& settings);
   void OnPairingStart(const std::string& session_id,