Provide feedback to user when the labelUI preference was saved

Changing the value in the list box automatically saves the new value
(there is no extra save button for this preference). Users might not
be aware of this, hence it should be shown to them that the new value
was successfully saved.

Change-Id: I90a54ba0f61a880f23430343e90e3fbb6c385aa2
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUiPreferencesPanel.java b/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUiPreferencesPanel.java
index 62de8e1..7685146 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUiPreferencesPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUiPreferencesPanel.java
@@ -20,6 +20,7 @@
 import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.event.dom.client.ChangeEvent;
 import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Label;
@@ -34,6 +35,9 @@
     }
   }
 
+  private Label savedLabel;
+  private Timer hideTimer;
+
   LabelUiPreferencesPanel() {
     new RestApi("accounts").id("self")
         .view(Plugin.get().getPluginName(), "preferences")
@@ -63,6 +67,11 @@
     label.getElement().getStyle().setMarginTop(2, Unit.PX);
     final ListBox ui = new ListBox();
     p.add(ui);
+    savedLabel = new Label("Saved");
+    savedLabel.getElement().getStyle().setMarginLeft(5, Unit.PX);
+    savedLabel.getElement().getStyle().setMarginTop(2, Unit.PX);
+    savedLabel.setVisible(false);
+    p.add(savedLabel);
 
     for (PreferencesInfo.LabelUi v : PreferencesInfo.LabelUi.values()) {
       ui.addItem(v.name(), v.name());
@@ -78,6 +87,7 @@
     ui.addChangeHandler(new ChangeHandler() {
       @Override
       public void onChange(ChangeEvent event) {
+        savedLabel.setVisible(false);
         PreferencesInfo info = PreferencesInfo.create();
         info.ui(ui.getSelectedValue());
         new RestApi("accounts").id("self")
@@ -85,6 +95,7 @@
             .put(info, new AsyncCallback<PreferencesInfo>() {
               @Override
               public void onSuccess(PreferencesInfo result) {
+                showSavedStatus();
               }
 
               @Override
@@ -95,4 +106,20 @@
       }
     });
   }
+
+  private void showSavedStatus() {
+    if (hideTimer != null) {
+      hideTimer.cancel();
+      hideTimer = null;
+    }
+    savedLabel.setVisible(true);
+    hideTimer = new Timer() {
+      @Override
+      public void run() {
+        savedLabel.setVisible(false);
+        hideTimer = null;
+      }
+    };
+    hideTimer.schedule(1000);
+  }
 }