Add option to set default visibility of change comments

Change-Id: I6d6b8152d40c828ddead39954f2170c0cd83a1ea
This commit is contained in:
Christian Aistleitner
2013-04-02 17:45:47 +02:00
parent 9c6588070c
commit a3cf7138cb
9 changed files with 110 additions and 3 deletions

View File

@@ -24,6 +24,7 @@ public interface AccountConstants extends Constants {
String registeredOn(); String registeredOn();
String accountId(); String accountId();
String commentVisibilityLabel();
String maximumPageSizeFieldLabel(); String maximumPageSizeFieldLabel();
String dateFormatLabel(); String dateFormatLabel();
String contextWholeFile(); String contextWholeFile();

View File

@@ -10,6 +10,7 @@ copySelfOnEmails = CC Me On Comments I Write
reversePatchSetOrder = Display Patch Sets In Reverse Order reversePatchSetOrder = Display Patch Sets In Reverse Order
showUsernameInReviewCategory = Display Person Name In Review Category showUsernameInReviewCategory = Display Person Name In Review Category
maximumPageSizeFieldLabel = Maximum Page Size: maximumPageSizeFieldLabel = Maximum Page Size:
commentVisibilityLabel = Comment Visibility:
dateFormatLabel = Date/Time Format: dateFormatLabel = Date/Time Format:
contextWholeFile = Whole File contextWholeFile = Whole File
buttonSaveChanges = Save Changes buttonSaveChanges = Save Changes

View File

@@ -23,6 +23,7 @@ import com.google.gerrit.client.rpc.ScreenLoadCallback;
import com.google.gerrit.client.ui.OnEditEnabler; import com.google.gerrit.client.ui.OnEditEnabler;
import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences; import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.CommentVisibilityStrategy;
import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.DateTimeFormat;
@@ -46,6 +47,7 @@ public class MyPreferencesScreen extends SettingsScreen {
private ListBox maximumPageSize; private ListBox maximumPageSize;
private ListBox dateFormat; private ListBox dateFormat;
private ListBox timeFormat; private ListBox timeFormat;
private ListBox commentVisibilityStrategy;
private Button save; private Button save;
@Override @Override
@@ -62,6 +64,24 @@ public class MyPreferencesScreen extends SettingsScreen {
maximumPageSize.addItem(Util.M.rowsPerPage(v), String.valueOf(v)); maximumPageSize.addItem(Util.M.rowsPerPage(v), String.valueOf(v));
} }
commentVisibilityStrategy = new ListBox();
commentVisibilityStrategy.addItem(
com.google.gerrit.client.changes.Util.C.messageCollapseAll(),
AccountGeneralPreferences.CommentVisibilityStrategy.COLLAPSE_ALL.name()
);
commentVisibilityStrategy.addItem(
com.google.gerrit.client.changes.Util.C.messageExpandMostRecent(),
AccountGeneralPreferences.CommentVisibilityStrategy.EXPAND_MOST_RECENT.name()
);
commentVisibilityStrategy.addItem(
com.google.gerrit.client.changes.Util.C.messageExpandRecent(),
AccountGeneralPreferences.CommentVisibilityStrategy.EXPAND_RECENT.name()
);
commentVisibilityStrategy.addItem(
com.google.gerrit.client.changes.Util.C.messageExpandAll(),
AccountGeneralPreferences.CommentVisibilityStrategy.EXPAND_ALL.name()
);
Date now = new Date(); Date now = new Date();
dateFormat = new ListBox(); dateFormat = new ListBox();
for (AccountGeneralPreferences.DateFormat fmt : AccountGeneralPreferences.DateFormat for (AccountGeneralPreferences.DateFormat fmt : AccountGeneralPreferences.DateFormat
@@ -98,7 +118,7 @@ public class MyPreferencesScreen extends SettingsScreen {
relativeDateInChangeTable = new CheckBox(Util.C.showRelativeDateInChangeTable()); relativeDateInChangeTable = new CheckBox(Util.C.showRelativeDateInChangeTable());
final Grid formGrid = new Grid(8, 2); final Grid formGrid = new Grid(9, 2);
int row = 0; int row = 0;
formGrid.setText(row, labelIdx, ""); formGrid.setText(row, labelIdx, "");
@@ -133,6 +153,10 @@ public class MyPreferencesScreen extends SettingsScreen {
formGrid.setWidget(row, fieldIdx, relativeDateInChangeTable); formGrid.setWidget(row, fieldIdx, relativeDateInChangeTable);
row++; row++;
formGrid.setText(row, labelIdx, Util.C.commentVisibilityLabel());
formGrid.setWidget(row, fieldIdx, commentVisibilityStrategy);
row++;
add(formGrid); add(formGrid);
save = new Button(Util.C.buttonSaveChanges()); save = new Button(Util.C.buttonSaveChanges());
@@ -155,6 +179,7 @@ public class MyPreferencesScreen extends SettingsScreen {
e.listenTo(dateFormat); e.listenTo(dateFormat);
e.listenTo(timeFormat); e.listenTo(timeFormat);
e.listenTo(relativeDateInChangeTable); e.listenTo(relativeDateInChangeTable);
e.listenTo(commentVisibilityStrategy);
} }
@Override @Override
@@ -177,6 +202,7 @@ public class MyPreferencesScreen extends SettingsScreen {
dateFormat.setEnabled(on); dateFormat.setEnabled(on);
timeFormat.setEnabled(on); timeFormat.setEnabled(on);
relativeDateInChangeTable.setEnabled(on); relativeDateInChangeTable.setEnabled(on);
commentVisibilityStrategy.setEnabled(on);
} }
private void display(final AccountGeneralPreferences p) { private void display(final AccountGeneralPreferences p) {
@@ -191,6 +217,9 @@ public class MyPreferencesScreen extends SettingsScreen {
setListBox(timeFormat, AccountGeneralPreferences.TimeFormat.HHMM_12, // setListBox(timeFormat, AccountGeneralPreferences.TimeFormat.HHMM_12, //
p.getTimeFormat()); p.getTimeFormat());
relativeDateInChangeTable.setValue(p.isRelativeDateInChangeTable()); relativeDateInChangeTable.setValue(p.isRelativeDateInChangeTable());
setListBox(commentVisibilityStrategy,
AccountGeneralPreferences.CommentVisibilityStrategy.EXPAND_MOST_RECENT,
p.getCommentVisibilityStrategy());
} }
private void setListBox(final ListBox f, final short defaultValue, private void setListBox(final ListBox f, final short defaultValue,
@@ -255,6 +284,9 @@ public class MyPreferencesScreen extends SettingsScreen {
AccountGeneralPreferences.TimeFormat.HHMM_12, AccountGeneralPreferences.TimeFormat.HHMM_12,
AccountGeneralPreferences.TimeFormat.values())); AccountGeneralPreferences.TimeFormat.values()));
p.setRelativeDateInChangeTable(relativeDateInChangeTable.getValue()); p.setRelativeDateInChangeTable(relativeDateInChangeTable.getValue());
p.setCommentVisibilityStrategy(getListBox(commentVisibilityStrategy,
CommentVisibilityStrategy.EXPAND_MOST_RECENT,
CommentVisibilityStrategy.values()));
enable(false); enable(false);
save.setEnabled(false); save.setEnabled(false);

View File

@@ -113,6 +113,7 @@ public interface ChangeConstants extends Constants {
String includedInTableTag(); String includedInTableTag();
String messageNoAuthor(); String messageNoAuthor();
String messageExpandMostRecent();
String messageExpandRecent(); String messageExpandRecent();
String messageExpandAll(); String messageExpandAll();
String messageCollapseAll(); String messageCollapseAll();

View File

@@ -90,6 +90,7 @@ includedInTableBranch = Branch Name
includedInTableTag = Tag Name includedInTableTag = Tag Name
messageNoAuthor = Gerrit Code Review messageNoAuthor = Gerrit Code Review
messageExpandMostRecent = Expand Most Recent
messageExpandRecent = Expand Recent messageExpandRecent = Expand Recent
messageExpandAll = Expand All messageExpandAll = Expand All
messageCollapseAll = Collapse All messageCollapseAll = Collapse All

View File

@@ -28,6 +28,7 @@ import com.google.gerrit.client.ui.Screen;
import com.google.gerrit.common.data.AccountInfoCache; import com.google.gerrit.common.data.AccountInfoCache;
import com.google.gerrit.common.data.ChangeDetail; import com.google.gerrit.common.data.ChangeDetail;
import com.google.gerrit.common.data.ChangeInfo; 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;
import com.google.gerrit.reviewdb.client.Change.Status; import com.google.gerrit.reviewdb.client.Change.Status;
import com.google.gerrit.reviewdb.client.ChangeMessage; import com.google.gerrit.reviewdb.client.ChangeMessage;
@@ -385,6 +386,13 @@ public class ChangeScreen extends Screen
final long AGE = 7 * 24 * 60 * 60 * 1000L; final long AGE = 7 * 24 * 60 * 60 * 1000L;
final Timestamp aged = new Timestamp(System.currentTimeMillis() - AGE); 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++) { for (int i = 0; i < msgList.size(); i++) {
final ChangeMessage msg = msgList.get(i); final ChangeMessage msg = msgList.get(i);
@@ -409,8 +417,23 @@ public class ChangeScreen extends Screen
cp.addStyleName(Gerrit.RESOURCES.css().commentPanelBorder()); cp.addStyleName(Gerrit.RESOURCES.css().commentPanelBorder());
if (i == msgList.size() - 1) { if (i == msgList.size() - 1) {
cp.addStyleName(Gerrit.RESOURCES.css().commentPanelLast()); 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); comments.add(cp);
} }

View File

@@ -65,6 +65,13 @@ public final class AccountGeneralPreferences {
} }
} }
public static enum CommentVisibilityStrategy {
COLLAPSE_ALL,
EXPAND_MOST_RECENT,
EXPAND_RECENT,
EXPAND_ALL;
}
public static enum TimeFormat { public static enum TimeFormat {
/** 12-hour clock: 1:15 am, 2:13 pm */ /** 12-hour clock: 1:15 am, 2:13 pm */
HHMM_12("h:mm a"), HHMM_12("h:mm a"),
@@ -126,6 +133,9 @@ public final class AccountGeneralPreferences {
@Column(id = 12) @Column(id = 12)
protected boolean relativeDateInChangeTable; protected boolean relativeDateInChangeTable;
@Column(id = 13, length = 20, notNull = false)
protected String commentVisibilityStrategy;
public AccountGeneralPreferences() { public AccountGeneralPreferences() {
} }
@@ -237,6 +247,18 @@ public final class AccountGeneralPreferences {
this.relativeDateInChangeTable = relativeDateInChangeTable; this.relativeDateInChangeTable = relativeDateInChangeTable;
} }
public CommentVisibilityStrategy getCommentVisibilityStrategy() {
if (commentVisibilityStrategy == null) {
return CommentVisibilityStrategy.EXPAND_MOST_RECENT;
}
return CommentVisibilityStrategy.valueOf(commentVisibilityStrategy);
}
public void setCommentVisibilityStrategy(
CommentVisibilityStrategy strategy) {
commentVisibilityStrategy = strategy.name();
}
public void resetToDefaults() { public void resetToDefaults() {
maximumPageSize = DEFAULT_PAGESIZE; maximumPageSize = DEFAULT_PAGESIZE;
showSiteHeader = true; showSiteHeader = true;

View File

@@ -32,7 +32,7 @@ import java.util.List;
/** A version of the database schema. */ /** A version of the database schema. */
public abstract class SchemaVersion { public abstract class SchemaVersion {
/** The current schema version. */ /** The current schema version. */
public static final Class<Schema_78> C = Schema_78.class; public static final Class<Schema_79> C = Schema_79.class;
public static class Module extends AbstractModule { public static class Module extends AbstractModule {
@Override @Override

View File

@@ -0,0 +1,26 @@
// Copyright (C) 2013 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.server.schema;
import com.google.inject.Inject;
import com.google.inject.Provider;
public class Schema_79 extends SchemaVersion {
@Inject
Schema_79(Provider<Schema_78> prior) {
super(prior);
}
}