diff options
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.java | 62 |
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); } |