ChangeScreen2: Auto-focus to submit button

After scoring a change with a maximum value in a radio group focus to
the submit button if it is enabled.  This allows committers to submit
a change with just Return/Enter/Space after posting Code-Review+2.

Change-Id: Ide28d62c24cfe7fd7e044d8b3b74ac5d246b8739
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
index b44bd3d..02da0d6 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
@@ -491,7 +491,7 @@
     if (rest.isEmpty()) {
       Gerrit.display(token, panel== null
           ? (isChangeScreen2()
-              ? new ChangeScreen2(id, null, null, false)
+              ? new ChangeScreen2(id, null, null, false, false)
               : new ChangeScreen(id))
           : new NotFoundScreen());
       return;
@@ -528,7 +528,7 @@
                 base != null
                     ? String.valueOf(base.get())
                     : null,
-                String.valueOf(ps.get()), false)
+                String.valueOf(ps.get()), false, false)
             : new ChangeScreen(id));
       } else if ("publish".equals(panel)) {
         publish(ps);
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
index a12e6fe..51c097c 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
@@ -129,6 +129,7 @@
   private Timestamp lastDisplayedUpdate;
   private UpdateAvailableBar updateAvailable;
   private boolean openReplyBox;
+  private boolean focusSubmit;
   private boolean loaded;
 
   @UiField HTMLPanel headerLine;
@@ -175,11 +176,14 @@
   private PatchSetsAction patchSetsAction;
   private DownloadAction downloadAction;
 
-  public ChangeScreen2(Change.Id changeId, String base, String revision, boolean openReplyBox) {
+  public ChangeScreen2(Change.Id changeId,
+      String base, String revision,
+      boolean openReplyBox, boolean focusSubmit) {
     this.changeId = changeId;
     this.base = normalize(base);
     this.revision = normalize(revision);
     this.openReplyBox = openReplyBox;
+    this.focusSubmit = focusSubmit;
     add(uiBinder.createAndBindUi(this));
   }
 
@@ -418,6 +422,8 @@
 
     if (openReplyBox) {
       onReply();
+    } else if (focusSubmit && actions.isSubmitEnabled()) {
+      actions.submit.setFocus(true);
     } else {
       String prior = Gerrit.getPriorView();
       if (prior != null && prior.startsWith("/c/")) {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/QuickApprove.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/QuickApprove.java
index ddb7d56..395d9c5 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/QuickApprove.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/QuickApprove.java
@@ -112,7 +112,9 @@
       .post(input, new GerritCallback<ReviewInput>() {
         @Override
         public void onSuccess(ReviewInput result) {
-          Gerrit.display(PageLinks.toChange(changeId));
+          Gerrit.display(
+            PageLinks.toChange(changeId),
+            new ChangeScreen2(changeId, null, null, false, true));
         }
       });
   }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyBox.java
index 36a831e..32308fa 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyBox.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyBox.java
@@ -31,6 +31,7 @@
 import com.google.gerrit.client.ui.CommentLinkProcessor;
 import com.google.gerrit.common.PageLinks;
 import com.google.gerrit.common.data.LabelValue;
+import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Patch;
 import com.google.gerrit.reviewdb.client.PatchSet;
 import com.google.gwt.core.client.GWT;
@@ -84,6 +85,7 @@
   private final CommentLinkProcessor clp;
   private final PatchSet.Id psId;
   private final String revision;
+  private final NativeMap<LabelInfo> labels;
   private ReviewInput in = ReviewInput.create();
   private Runnable lgtm;
 
@@ -106,6 +108,7 @@
     this.clp = clp;
     this.psId = psId;
     this.revision = revision;
+    this.labels = all;
     initWidget(uiBinder.createAndBindUi(this));
 
     List<String> names = new ArrayList<String>(permitted.keySet());
@@ -193,14 +196,28 @@
   void onPost(ClickEvent e) {
     in.message(message.getText().trim());
     in.prePost();
+
+    boolean s = false;
+    for (String name : labels.keySet()) {
+      if (in.label(name) != 0) {
+        if (in.label(name) == labels.get(name).value_set().last()) {
+          s = true;
+          break;
+        }
+      }
+    }
+    final boolean submit = s;
+
     ChangeApi.revision(psId.getParentKey().get(), revision)
       .view("review")
       .post(in, new GerritCallback<ReviewInput>() {
         @Override
         public void onSuccess(ReviewInput result) {
-          Gerrit.display(PageLinks.toChange(
-              psId.getParentKey(),
-              String.valueOf(psId.get())));
+          Change.Id changeId = psId.getParentKey();
+          String rev = String.valueOf(psId.get());
+          Gerrit.display(
+            PageLinks.toChange(changeId, rev),
+            new ChangeScreen2(changeId, null, rev, false, submit));
         }
       });
     hide();
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ReviewInput.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ReviewInput.java
index 0599a8b..03c115a 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ReviewInput.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ReviewInput.java
@@ -36,6 +36,7 @@
 
   public final native void message(String m) /*-{ if(m)this.message=m; }-*/;
   public final native void label(String n, short v) /*-{ this.labels[n]=v; }-*/;
+  public final native short label(String n) /*-{ return this.labels[n]||0 }-*/;
   public final native void comments(NativeMap<JsArray<CommentInfo>> m)
   /*-{ this.comments=m }-*/;
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
index c87bb28..83d6add 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
@@ -1291,7 +1291,7 @@
     String rev = String.valueOf(revision.get());
     Gerrit.display(
       PageLinks.toChange(changeId, rev),
-      new ChangeScreen2(changeId, b, rev, openReplyBox));
+      new ChangeScreen2(changeId, b, rev, openReplyBox, false));
   }
 
   private Runnable openClosePublished(final CodeMirror cm) {