Adds LAUNCHER_FOLDER_LABEL_CHANGED event.

Sample Log: https://docs.google.com/document/d/1CBP2yTcXdFhPdNG5ZmWFKSgd8mDbMevY-akVlUXPLDo/edit#bookmark=id.qwjknn6acmx6

Bug: 155410872
Bug: 152978018

Change-Id: Ib7641d3d42a3f4fd002d1dbb36dc4b9ea0f885fc
diff --git a/protos/launcher_atom.proto b/protos/launcher_atom.proto
index cac2d8f..19f7213 100644
--- a/protos/launcher_atom.proto
+++ b/protos/launcher_atom.proto
@@ -95,7 +95,17 @@
 
 // Represents folder in a closed state.
 message FolderIcon {
+  // Number of items inside folder.
   optional int32 cardinality = 1;
+
+  // State of the folder label before the event.
+  optional FromState from_state = 2;
+
+  // State of the folder label after the event.
+  optional ToState to_state = 3;
+
+  // Populated only when folder label was suggested.
+  optional string label = 4;
 }
 
 //////////////////////////////////////////////
@@ -120,3 +130,71 @@
     HotseatContainer hotseat = 5;
   }
 }
+
+// Represents state of FolderLabel before editing.
+enum FromState {
+  // Default value.
+  FROM_STATE_UNSPECIFIED = 0;
+
+  // FolderLabel was empty.
+  FROM_EMPTY = 1;
+
+  // FolderLabel was non-empty and manually entered by the user.
+  FROM_CUSTOM = 2;
+
+  // FolderLabel was non-empty and one of the suggestions.
+  FROM_SUGGESTED = 3;
+}
+
+// Represents state of FolderLabel after editing.
+enum ToState {
+  // Default value.
+  TO_STATE_UNSPECIFIED = 0;
+  // User attempted to change the folder label, but was not changed.
+  UNCHANGED = 1;
+
+  // New label matches with primary(aka top) suggestion.
+  TO_SUGGESTION0 = 2;
+
+  // New label matches with second top suggestion even though the top suggestion was non-empty.
+  TO_SUGGESTION1_WITH_VALID_PRIMARY = 3;
+
+  // New label matches with second top suggestion given that top suggestion was empty.
+  TO_SUGGESTION1_WITH_EMPTY_PRIMARY = 4;
+
+  // New label matches with third top suggestion even though the top suggestion was non-empty.
+  TO_SUGGESTION2_WITH_VALID_PRIMARY = 5;
+
+  // New label matches with third top suggestion given that top suggestion was empty.
+  TO_SUGGESTION2_WITH_EMPTY_PRIMARY = 6;
+
+  // New label matches with 4th top suggestion even though the top suggestion was non-empty.
+  TO_SUGGESTION3_WITH_VALID_PRIMARY = 7;
+
+  // New label matches with 4th top suggestion given that top suggestion was empty.
+  TO_SUGGESTION3_WITH_EMPTY_PRIMARY = 8;
+
+  // New label is empty even though the top suggestion was non-empty.
+  TO_EMPTY_WITH_VALID_PRIMARY = 9;
+
+  // New label is empty given that top suggestion was empty.
+  TO_EMPTY_WITH_VALID_SUGGESTIONS_AND_EMPTY_PRIMARY = 10;
+
+  // New label is empty given that no suggestions were provided.
+  TO_EMPTY_WITH_EMPTY_SUGGESTIONS = 11;
+
+  // New label is empty given that suggestions feature was disabled.
+  TO_EMPTY_WITH_SUGGESTIONS_DISABLED = 12;
+
+  // New label is non-empty and does not match with any of the suggestions even though the top suggestion was non-empty.
+  TO_CUSTOM_WITH_VALID_PRIMARY = 13;
+
+  // New label is non-empty and not match with any suggestions given that top suggestion was empty.
+  TO_CUSTOM_WITH_VALID_SUGGESTIONS_AND_EMPTY_PRIMARY = 14;
+
+  // New label is non-empty and also no suggestions were provided.
+  TO_CUSTOM_WITH_EMPTY_SUGGESTIONS = 15;
+
+  // New label is non-empty and also suggestions feature was disable.
+  TO_CUSTOM_WITH_SUGGESTIONS_DISABLED = 16;
+}