Merge "ChangeScreen2: Display a welcome bar to new users"
This commit is contained in:
@@ -91,10 +91,12 @@ import com.google.gerrit.reviewdb.client.Project;
|
|||||||
import com.google.gwt.core.client.GWT;
|
import com.google.gwt.core.client.GWT;
|
||||||
import com.google.gwt.core.client.RunAsyncCallback;
|
import com.google.gwt.core.client.RunAsyncCallback;
|
||||||
import com.google.gwt.http.client.URL;
|
import com.google.gwt.http.client.URL;
|
||||||
|
import com.google.gwt.user.client.Cookies;
|
||||||
import com.google.gwt.user.client.Window;
|
import com.google.gwt.user.client.Window;
|
||||||
import com.google.gwtorm.client.KeyUtil;
|
import com.google.gwtorm.client.KeyUtil;
|
||||||
|
|
||||||
public class Dispatcher {
|
public class Dispatcher {
|
||||||
|
public static final String COOKIE_CS2 = "gerrit_cs2";
|
||||||
public static boolean changeScreen2;
|
public static boolean changeScreen2;
|
||||||
|
|
||||||
public static String toPatchSideBySide(final Patch.Key id) {
|
public static String toPatchSideBySide(final Patch.Key id) {
|
||||||
@@ -551,6 +553,11 @@ public class Dispatcher {
|
|||||||
.getGeneralPreferences()
|
.getGeneralPreferences()
|
||||||
.getChangeScreen();
|
.getChangeScreen();
|
||||||
}
|
}
|
||||||
|
String v = Cookies.getCookie(Dispatcher.COOKIE_CS2);
|
||||||
|
if (v != null) {
|
||||||
|
changeScreen2 = "1".equals(v);
|
||||||
|
return changeScreen2;
|
||||||
|
}
|
||||||
if (ui == null) {
|
if (ui == null) {
|
||||||
ui = Gerrit.getConfig().getChangeScreen();
|
ui = Gerrit.getConfig().getChangeScreen();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -427,6 +427,9 @@ public class ChangeScreen2 extends Screen {
|
|||||||
|
|
||||||
ChangeGlue.fireShowChange(changeInfo, changeInfo.revision(revision));
|
ChangeGlue.fireShowChange(changeInfo, changeInfo.revision(revision));
|
||||||
startPoller();
|
startPoller();
|
||||||
|
if (NewChangeScreenBar.show()) {
|
||||||
|
add(new NewChangeScreenBar(changeId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void scrollToPath(String token) {
|
private void scrollToPath(String token) {
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
// 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.client.change;
|
||||||
|
|
||||||
|
import com.google.gerrit.client.Dispatcher;
|
||||||
|
import com.google.gerrit.client.Gerrit;
|
||||||
|
import com.google.gerrit.client.account.AccountApi;
|
||||||
|
import com.google.gerrit.common.PageLinks;
|
||||||
|
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.ChangeScreen;
|
||||||
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.core.client.JavaScriptObject;
|
||||||
|
import com.google.gwt.dom.client.Element;
|
||||||
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
|
import com.google.gwt.uibinder.client.UiBinder;
|
||||||
|
import com.google.gwt.uibinder.client.UiField;
|
||||||
|
import com.google.gwt.uibinder.client.UiHandler;
|
||||||
|
import com.google.gwt.user.client.Cookies;
|
||||||
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwt.user.client.ui.Anchor;
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.HTMLPanel;
|
||||||
|
import com.google.gwt.user.client.ui.UIObject;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/** Displays a welcome to the new change screen bar. */
|
||||||
|
class NewChangeScreenBar extends Composite {
|
||||||
|
interface Binder extends UiBinder<HTMLPanel, NewChangeScreenBar> {}
|
||||||
|
private static final Binder uiBinder = GWT.create(Binder.class);
|
||||||
|
|
||||||
|
static boolean show() {
|
||||||
|
if (Gerrit.isSignedIn()) {
|
||||||
|
return Gerrit.getUserAccount()
|
||||||
|
.getGeneralPreferences()
|
||||||
|
.getChangeScreen() == null;
|
||||||
|
}
|
||||||
|
return Cookies.getCookie(Dispatcher.COOKIE_CS2) == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Change.Id id;
|
||||||
|
|
||||||
|
@UiField Element docs;
|
||||||
|
@UiField Element settings;
|
||||||
|
@UiField Anchor keepNew;
|
||||||
|
@UiField Anchor keepOld;
|
||||||
|
|
||||||
|
NewChangeScreenBar(Change.Id id) {
|
||||||
|
this.id = id;
|
||||||
|
initWidget(uiBinder.createAndBindUi(this));
|
||||||
|
UIObject.setVisible(docs, Gerrit.getConfig().isDocumentationAvailable());
|
||||||
|
UIObject.setVisible(settings, Gerrit.isSignedIn());
|
||||||
|
}
|
||||||
|
|
||||||
|
@UiHandler("keepOld")
|
||||||
|
void onKeepOld(ClickEvent e) {
|
||||||
|
save(ChangeScreen.OLD_UI);
|
||||||
|
Gerrit.display(PageLinks.toChange(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@UiHandler("keepNew")
|
||||||
|
void onKeepNew(ClickEvent e) {
|
||||||
|
save(ChangeScreen.CHANGE_SCREEN2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void save(ChangeScreen sel) {
|
||||||
|
removeFromParent();
|
||||||
|
Dispatcher.changeScreen2 = sel == ChangeScreen.CHANGE_SCREEN2;
|
||||||
|
|
||||||
|
if (Gerrit.isSignedIn()) {
|
||||||
|
Gerrit.getUserAccount().getGeneralPreferences().setChangeScreen(sel);
|
||||||
|
|
||||||
|
Prefs in = Prefs.createObject().cast();
|
||||||
|
in.change_screen(sel.name());
|
||||||
|
AccountApi.self().view("preferences").background().post(in,
|
||||||
|
new AsyncCallback<JavaScriptObject>() {
|
||||||
|
@Override public void onFailure(Throwable caught) {}
|
||||||
|
@Override public void onSuccess(JavaScriptObject result) {}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Cookies.setCookie(
|
||||||
|
Dispatcher.COOKIE_CS2,
|
||||||
|
Dispatcher.changeScreen2 ? "1" : "0",
|
||||||
|
new Date(System.currentTimeMillis() + 7 * 24 * 3600 * 1000));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class Prefs extends JavaScriptObject {
|
||||||
|
final native void change_screen(String n) /*-{ this.change_screen=n }-*/;
|
||||||
|
protected Prefs() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
<ui:UiBinder
|
||||||
|
xmlns:ui='urn:ui:com.google.gwt.uibinder'
|
||||||
|
xmlns:c='urn:import:com.google.gwtexpui.globalkey.client'
|
||||||
|
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
|
||||||
|
<ui:style>
|
||||||
|
.popup {
|
||||||
|
position: fixed;
|
||||||
|
top: 5px;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -200px;
|
||||||
|
z-index: 201;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
padding-left: 12px;
|
||||||
|
padding-right: 12px;
|
||||||
|
text-align: center;
|
||||||
|
background: #FFF1A8;
|
||||||
|
-webkit-border-radius: 10px;
|
||||||
|
-moz-border-radius: 10px;
|
||||||
|
}
|
||||||
|
a.action {
|
||||||
|
color: #222;
|
||||||
|
text-decoration: underline;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
.welcome { font-weight: bold; }
|
||||||
|
</ui:style>
|
||||||
|
<g:HTMLPanel styleName='{style.popup}'>
|
||||||
|
<div><ui:msg><span class='{style.welcome}'>Welcome to the new change screen!</span>
|
||||||
|
<a ui:field='docs'
|
||||||
|
class='{style.action}'
|
||||||
|
href='Documentation/intro-change-screen.html'
|
||||||
|
target='_blank'>Learn more</a></ui:msg>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<ui:msg>You can<g:Anchor ui:field='keepOld'
|
||||||
|
styleName='{style.action}'
|
||||||
|
href='javascript:;'
|
||||||
|
title='Switch back to the old screen'><ui:attribute name='title'/>revert to the old screen</g:Anchor>
|
||||||
|
<span ui:field='settings'>in Settings > Preferences</span>.
|
||||||
|
<g:Anchor ui:field='keepNew'
|
||||||
|
styleName='{style.action}'
|
||||||
|
href='javascript:;'
|
||||||
|
title='Keep the new change screen'>
|
||||||
|
<ui:attribute name='title'/>
|
||||||
|
Got it!
|
||||||
|
</g:Anchor></ui:msg>
|
||||||
|
</div>
|
||||||
|
</g:HTMLPanel>
|
||||||
|
</ui:UiBinder>
|
||||||
@@ -371,7 +371,7 @@ a:hover {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
background: #FFF1A8;
|
background: #FFF1A8;
|
||||||
z-index: 10;
|
z-index: 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
|
|||||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.CommentVisibilityStrategy;
|
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.CommentVisibilityStrategy;
|
||||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DateFormat;
|
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DateFormat;
|
||||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DiffView;
|
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DiffView;
|
||||||
|
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.ChangeScreen;
|
||||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand;
|
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand;
|
||||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadScheme;
|
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadScheme;
|
||||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.TimeFormat;
|
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.TimeFormat;
|
||||||
@@ -50,6 +51,7 @@ public class SetPreferences implements RestModifyView<AccountResource, Input> {
|
|||||||
Boolean sizeBarInChangeTable;
|
Boolean sizeBarInChangeTable;
|
||||||
CommentVisibilityStrategy commentVisibilityStrategy;
|
CommentVisibilityStrategy commentVisibilityStrategy;
|
||||||
DiffView diffView;
|
DiffView diffView;
|
||||||
|
ChangeScreen changeScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Provider<CurrentUser> self;
|
private final Provider<CurrentUser> self;
|
||||||
@@ -131,6 +133,9 @@ public class SetPreferences implements RestModifyView<AccountResource, Input> {
|
|||||||
if (i.diffView != null) {
|
if (i.diffView != null) {
|
||||||
p.setDiffView(i.diffView);
|
p.setDiffView(i.diffView);
|
||||||
}
|
}
|
||||||
|
if (i.changeScreen != null) {
|
||||||
|
p.setChangeScreen(i.changeScreen);
|
||||||
|
}
|
||||||
|
|
||||||
db.accounts().update(Collections.singleton(a));
|
db.accounts().update(Collections.singleton(a));
|
||||||
db.commit();
|
db.commit();
|
||||||
|
|||||||
Reference in New Issue
Block a user