summaryrefslogtreecommitdiffstats
path: root/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java')
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java62
1 files changed, 53 insertions, 9 deletions
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java
index 91c885691a..c69f915ea3 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java
@@ -18,7 +18,10 @@ import com.google.gerrit.client.Dispatcher;
import com.google.gerrit.client.FormatUtil;
import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.account.AccountInfo;
+import com.google.gerrit.client.projects.ConfigInfoCache;
+import com.google.gerrit.client.rpc.CallbackGroup;
import com.google.gerrit.client.rpc.GerritCallback;
+import com.google.gerrit.client.ui.CommentLinkProcessor;
import com.google.gerrit.client.ui.CommentPanel;
import com.google.gerrit.client.ui.ComplexDisclosurePanel;
import com.google.gerrit.client.ui.ExpandAllCommand;
@@ -28,6 +31,7 @@ import com.google.gerrit.client.ui.Screen;
import com.google.gerrit.common.data.AccountInfoCache;
import com.google.gerrit.common.data.ChangeDetail;
import com.google.gerrit.common.data.ChangeInfo;
+import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.CommentVisibilityStrategy;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Change.Status;
import com.google.gerrit.reviewdb.client.ChangeMessage;
@@ -78,6 +82,7 @@ public class ChangeScreen extends Screen
private PatchSetsBlock patchSetsBlock;
private Panel comments;
+ private CommentLinkProcessor commentLinkProcessor;
private KeyCommandSet keysNavigation;
private KeyCommandSet keysAction;
@@ -264,10 +269,26 @@ public class ChangeScreen extends Screen
@Override
public void onValueChange(final ValueChangeEvent<ChangeDetail> event) {
if (isAttached() && isLastValueChangeHandler()) {
- // Until this screen is fully migrated to the new API, this call must be
- // sequential, because we can't start an async get at the source of every
- // call that might trigger a value change.
- ChangeApi.detail(event.getValue().getChange().getId().get(),
+ // Until this screen is fully migrated to the new API, these calls must
+ // happen sequentially after the ChangeDetail lookup, because we can't
+ // start an async get at the source of every call that might trigger a
+ // value change.
+ CallbackGroup cbs = new CallbackGroup();
+ ConfigInfoCache.get(
+ event.getValue().getChange().getProject(),
+ cbs.add(new GerritCallback<ConfigInfoCache.Entry>() {
+ @Override
+ public void onSuccess(ConfigInfoCache.Entry result) {
+ commentLinkProcessor = result.getCommentLinkProcessor();
+ setTheme(result.getTheme());
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ // Handled by last callback's onFailure.
+ }
+ }));
+ ChangeApi.detail(event.getValue().getChange().getId().get(), cbs.add(
new GerritCallback<com.google.gerrit.client.changes.ChangeInfo>() {
@Override
public void onSuccess(
@@ -275,7 +296,7 @@ public class ChangeScreen extends Screen
changeInfo = result;
display(event.getValue());
}
- });
+ }));
}
}
@@ -305,7 +326,8 @@ public class ChangeScreen extends Screen
detail.isStarred(),
detail.canEditCommitMessage(),
detail.getCurrentPatchSetDetail().getInfo(),
- detail.getAccounts(), detail.getSubmitTypeRecord());
+ detail.getAccounts(), detail.getSubmitTypeRecord(),
+ commentLinkProcessor);
dependsOn.display(detail.getDependsOn());
neededBy.display(detail.getNeededBy());
approvals.display(changeInfo);
@@ -399,6 +421,13 @@ public class ChangeScreen extends Screen
final long AGE = 7 * 24 * 60 * 60 * 1000L;
final Timestamp aged = new Timestamp(System.currentTimeMillis() - AGE);
+ CommentVisibilityStrategy commentVisibilityStrategy =
+ CommentVisibilityStrategy.EXPAND_MOST_RECENT;
+ if (Gerrit.isSignedIn()) {
+ commentVisibilityStrategy = Gerrit.getUserAccount()
+ .getGeneralPreferences().getCommentVisibilityStrategy();
+ }
+
for (int i = 0; i < msgList.size(); i++) {
final ChangeMessage msg = msgList.get(i);
@@ -417,14 +446,29 @@ public class ChangeScreen extends Screen
isRecent = msg.getWrittenOn().after(aged);
}
- final CommentPanel cp =
- new CommentPanel(author, msg.getWrittenOn(), msg.getMessage());
+ final CommentPanel cp = new CommentPanel(author, msg.getWrittenOn(),
+ msg.getMessage(), commentLinkProcessor);
cp.setRecent(isRecent);
cp.addStyleName(Gerrit.RESOURCES.css().commentPanelBorder());
if (i == msgList.size() - 1) {
cp.addStyleName(Gerrit.RESOURCES.css().commentPanelLast());
- cp.setOpen(true);
}
+ boolean isOpen = false;
+ switch (commentVisibilityStrategy) {
+ case COLLAPSE_ALL:
+ break;
+ case EXPAND_RECENT:
+ isOpen = isRecent;
+ break;
+ case EXPAND_ALL:
+ isOpen = true;
+ break;
+ case EXPAND_MOST_RECENT:
+ default:
+ isOpen = i == msgList.size() - 1;
+ break;
+ }
+ cp.setOpen(isOpen);
comments.add(cp);
}