Commit 8a3cb1d1 authored by avayvod@chromium.org's avatar avayvod@chromium.org

[cros] Separate network screen from views.

R=altimofeev@chromium.org
BUG=chromium-os:11632
TEST=Check that network screen works as before. Run NetworkScreenTest.* browser tests

Review URL: http://codereview.chromium.org/7066020

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86600 0039d316-1c4b-4281-b951-d872f2087c98
parent ce7dafef
......@@ -22,7 +22,6 @@
#include "chrome/browser/chromeos/login/help_app_launcher.h"
#include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/login_utils.h"
#include "chrome/browser/chromeos/login/network_screen_delegate.h"
#include "chrome/browser/chromeos/login/rounded_rect_painter.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/profiles/profile_manager.h"
......
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
......@@ -14,13 +14,13 @@
#include "chrome/browser/chromeos/login/login_utils.h"
#include "chrome/browser/chromeos/login/network_selection_view.h"
#include "chrome/browser/chromeos/login/screen_observer.h"
#include "chrome/browser/chromeos/login/views_network_screen_actor.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "views/controls/menu/menu_2.h"
#include "views/widget/widget.h"
#include "views/window/window.h"
......@@ -29,10 +29,6 @@ namespace {
// Time in seconds for connection timeout.
const int kConnectionTimeoutSec = 15;
// Considering 10px shadow from each side & welcome title height at 30px.
const int kWelcomeScreenWidth = 580;
const int kWelcomeScreenHeight = 335;
} // namespace
namespace chromeos {
......@@ -41,13 +37,10 @@ namespace chromeos {
// NetworkScreen, public:
NetworkScreen::NetworkScreen(WizardScreenDelegate* delegate)
: ViewScreen<NetworkSelectionView>(delegate,
kWelcomeScreenWidth,
kWelcomeScreenHeight),
: WizardScreen(delegate),
is_network_subscribed_(false),
continue_pressed_(false),
bubble_(NULL) {
language_switch_menu_.set_menu_alignment(views::Menu2::ALIGN_TOPLEFT);
actor_(new ViewsNetworkScreenActor(delegate, this)) {
}
NetworkScreen::~NetworkScreen() {
......@@ -56,88 +49,29 @@ NetworkScreen::~NetworkScreen() {
}
////////////////////////////////////////////////////////////////////////////////
// NetworkScreen, NetworkScreenDelegate implementation:
void NetworkScreen::ClearErrors() {
// bubble_ will be set to NULL in callback.
if (bubble_)
bubble_->Close();
}
// NetworkScreen, WizardScreen implementation:
bool NetworkScreen::is_error_shown() {
return bubble_ != NULL;
void NetworkScreen::Show() {
actor_->Show();
Refresh();
}
LanguageSwitchMenu* NetworkScreen::language_switch_menu() {
return &language_switch_menu_;
void NetworkScreen::Hide() {
actor_->Hide();
}
KeyboardSwitchMenu* NetworkScreen::keyboard_switch_menu() {
return &keyboard_switch_menu_;
}
gfx::Size NetworkScreen::size() const {
return GetScreenSize();
}
///////////////////////////////////////////////////////////////////////////////
// views::ButtonListener implementation:
void NetworkScreen::ButtonPressed(views::Button* sender,
const views::Event& event) {
ClearErrors();
NetworkLibrary* network = CrosLibrary::Get()->GetNetworkLibrary();
if (network && network->Connected()) {
NotifyOnConnection();
} else {
continue_pressed_ = true;
WaitForConnection(network_id_);
}
gfx::Size NetworkScreen::GetScreenSize() const {
// TODO(avayvod): WizardController shouldn't need this info from screens.
return actor_->GetScreenSize();
}
////////////////////////////////////////////////////////////////////////////////
// NetworkLibrary::NetworkManagerObserver implementation:
// NetworkScreen, NetworkLibrary::NetworkManagerObserver implementation:
void NetworkScreen::OnNetworkManagerChanged(NetworkLibrary* network_lib) {
UpdateStatus(network_lib);
}
///////////////////////////////////////////////////////////////////////////////
// NetworkScreen, ViewScreen implementation:
void NetworkScreen::CreateView() {
language_switch_menu_.InitLanguageMenu();
ViewScreen<NetworkSelectionView>::CreateView();
}
NetworkSelectionView* NetworkScreen::AllocateView() {
return new NetworkSelectionView(this);
}
///////////////////////////////////////////////////////////////////////////////
// NetworkScreen, views::BubbleDelegate implementation:
void NetworkScreen::BubbleClosing(Bubble* bubble, bool closed_by_escape) {
bubble_ = NULL;
}
bool NetworkScreen::CloseOnEscape() {
return true;
}
bool NetworkScreen::FadeInOnShow() {
return false;
}
void NetworkScreen::OnHelpLinkActivated() {
ClearErrors();
if (!help_app_.get()) {
help_app_ = new HelpAppLauncher(
LoginUtils::Get()->GetBackgroundView()->GetNativeWindow());
}
help_app_->ShowHelpTopic(HelpAppLauncher::HELP_CONNECTIVITY);
}
////////////////////////////////////////////////////////////////////////////////
// NetworkScreen, public:
......@@ -148,6 +82,19 @@ void NetworkScreen::Refresh() {
}
}
///////////////////////////////////////////////////////////////////////////////
// NetworkScreen, NetworkScreenActor::Delegate implementation:
void NetworkScreen::OnContinuePressed() {
NetworkLibrary* network = CrosLibrary::Get()->GetNetworkLibrary();
if (network && network->Connected()) {
NotifyOnConnection();
} else {
continue_pressed_ = true;
WaitForConnection(network_id_);
}
}
////////////////////////////////////////////////////////////////////////////////
// NetworkScreen, private:
......@@ -179,33 +126,22 @@ void NetworkScreen::OnConnectionTimeout() {
NetworkLibrary* network = CrosLibrary::Get()->GetNetworkLibrary();
bool is_connected = network && network->Connected();
if (!is_connected &&
!view()->is_dialog_open() &&
!(help_app_.get() && help_app_->is_open())) {
if (!is_connected) {
// Show error bubble.
ClearErrors();
views::View* network_control = view()->GetNetworkControlView();
bubble_ = MessageBubble::Show(
network_control->GetWidget(),
network_control->GetScreenBounds(),
BubbleBorder::LEFT_TOP,
ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING),
UTF16ToWide(l10n_util::GetStringFUTF16(
actor_->ShowError(
l10n_util::GetStringFUTF16(
IDS_NETWORK_SELECTION_ERROR,
l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME),
network_id_)),
UTF16ToWide(l10n_util::GetStringUTF16(IDS_LEARN_MORE)),
this);
network_control->RequestFocus();
network_id_));
}
}
void NetworkScreen::UpdateStatus(NetworkLibrary* network) {
if (!view() || !network)
if (!actor_.get() || !network)
return;
if (network->Connected())
ClearErrors();
actor_->ClearErrors();
string16 network_name = GetCurrentNetworkName(network);
if (network->Connected()) {
......@@ -229,8 +165,8 @@ void NetworkScreen::StopWaitingForConnection(const string16& network_id) {
connection_timer_.Stop();
network_id_ = network_id;
view()->ShowConnectingStatus(false, network_id_);
view()->EnableContinue(is_connected);
actor_->ShowConnectingStatus(false, network_id_);
actor_->EnableContinue(is_connected);
}
void NetworkScreen::WaitForConnection(const string16& network_id) {
......@@ -242,9 +178,9 @@ void NetworkScreen::WaitForConnection(const string16& network_id) {
}
network_id_ = network_id;
view()->ShowConnectingStatus(continue_pressed_, network_id_);
actor_->ShowConnectingStatus(continue_pressed_, network_id_);
view()->EnableContinue(false);
actor_->EnableContinue(false);
}
} // namespace chromeos
......@@ -14,54 +14,40 @@
#include "chrome/browser/chromeos/login/keyboard_switch_menu.h"
#include "chrome/browser/chromeos/login/language_switch_menu.h"
#include "chrome/browser/chromeos/login/message_bubble.h"
#include "chrome/browser/chromeos/login/network_screen_delegate.h"
#include "chrome/browser/chromeos/login/network_screen_actor.h"
#include "chrome/browser/chromeos/login/network_selection_view.h"
#include "chrome/browser/chromeos/login/view_screen.h"
#include "chrome/browser/chromeos/login/wizard_screen.h"
#include "chrome/browser/chromeos/options/network_config_view.h"
class WizardScreenDelegate;
namespace chromeos {
class HelpAppLauncher;
class NetworkScreen : public ViewScreen<NetworkSelectionView>,
public MessageBubbleDelegate,
public NetworkScreenDelegate {
class NetworkScreen : public WizardScreen,
public NetworkLibrary::NetworkManagerObserver,
public NetworkScreenActor::Delegate {
public:
explicit NetworkScreen(WizardScreenDelegate* delegate);
virtual ~NetworkScreen();
// NetworkScreenDelegate implementation:
virtual void ClearErrors();
virtual bool is_error_shown();
virtual LanguageSwitchMenu* language_switch_menu();
virtual KeyboardSwitchMenu* keyboard_switch_menu();
virtual gfx::Size size() const;
// views::ButtonListener implementation:
virtual void ButtonPressed(views::Button* sender, const views::Event& event);
// WizardScreen implementation:
virtual void Show();
virtual void Hide();
virtual gfx::Size GetScreenSize() const;
// NetworkLibrary::NetworkManagerObserver implementation:
virtual void OnNetworkManagerChanged(NetworkLibrary* network_lib);
// NetworkScreenActor::Delegate implementation:
virtual void OnContinuePressed();
NetworkScreenActor* actor() const { return actor_.get(); }
protected:
// Subscribes NetworkScreen to the network change notification,
// forces refresh of current network state.
virtual void Refresh();
private:
FRIEND_TEST(NetworkScreenTest, Timeout);
// ViewScreen implementation:
virtual void CreateView();
virtual NetworkSelectionView* AllocateView();
// Overridden from views::BubbleDelegate.
virtual void BubbleClosing(Bubble* bubble, bool closed_by_escape);
virtual bool CloseOnEscape();
virtual bool FadeInOnShow();
virtual void OnHelpLinkActivated();
FRIEND_TEST_ALL_PREFIXES(NetworkScreenTest, Timeout);
// Subscribes to network change notifications.
void SubscribeNetworkNotification();
......@@ -97,15 +83,7 @@ class NetworkScreen : public ViewScreen<NetworkSelectionView>,
// Timer for connection timeout.
base::OneShotTimer<NetworkScreen> connection_timer_;
LanguageSwitchMenu language_switch_menu_;
KeyboardSwitchMenu keyboard_switch_menu_;
// Pointer to shown message bubble. We don't need to delete it because
// it will be deleted on bubble closing.
MessageBubble* bubble_;
// Help application used for help dialogs.
scoped_refptr<HelpAppLauncher> help_app_;
scoped_ptr<NetworkScreenActor> actor_;
DISALLOW_COPY_AND_ASSIGN(NetworkScreen);
};
......
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SCREEN_ACTOR_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SCREEN_ACTOR_H_
#pragma once
namespace chromeos {
class HelpAppLauncher;
class NetworkSelectionView;
// Interface for dependency injection between NetworkScreen and its actual
// representation, either views based or WebUI. Owned by NetworkScreen.
class NetworkScreenActor {
public:
class Delegate {
public:
virtual ~Delegate() {}
virtual void OnContinuePressed() = 0;
};
virtual ~NetworkScreenActor() {}
// Shows the contents of the screen.
virtual void Show() = 0;
// Hides the contents of the screen.
virtual void Hide() = 0;
// Returns the size of the screen contents.
virtual gfx::Size GetScreenSize() const = 0;
// Shows error message in a bubble.
virtual void ShowError(const string16& message) = 0;
// Hides error messages showing no error state.
virtual void ClearErrors() = 0;
// Shows network connecting status or network selection otherwise.
virtual void ShowConnectingStatus(
bool connecting,
const string16& network_id) = 0;
// Sets whether continue control is enabled.
virtual void EnableContinue(bool enabled) = 0;
// Returns if continue control is enabled.
virtual bool IsContinueEnabled() const = 0;
// Returns true if we're in the connecting state.
virtual bool IsConnecting() const = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SCREEN_ACTOR_H_
......@@ -122,12 +122,7 @@ class NetworkScreenTest : public WizardInProcessBrowserTest {
EXPECT_CALL(*mock_network_library_, Connected())
.WillOnce(Return(true));
controller()->set_observer(mock_screen_observer.get());
DummyButtonListener button_listener;
views::TextButton button(&button_listener, L"Button");
views::MouseEvent event(ui::ET_MOUSE_RELEASED,
0, 0,
ui::EF_LEFT_BUTTON_DOWN);
network_screen->ButtonPressed(&button, event);
network_screen->OnContinuePressed();
ui_test_utils::RunAllPendingInMessageLoop();
controller()->set_observer(NULL);
}
......@@ -146,8 +141,8 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Ethernet) {
ASSERT_TRUE(network_screen != NULL);
ASSERT_EQ(network_screen, controller()->current_screen());
NetworkSelectionView* network_view = network_screen->view();
ASSERT_TRUE(network_view != NULL);
NetworkScreenActor* actor = network_screen->actor();
ASSERT_TRUE(actor != NULL);
EXPECT_CALL(*mock_network_library_, ethernet_connected())
.WillOnce((Return(false)));
......@@ -157,7 +152,7 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Ethernet) {
.WillOnce((Return(false)));
EXPECT_CALL(*mock_network_library_, ethernet_connecting())
.WillOnce((Return(true)));
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(actor->IsContinueEnabled());
network_screen->OnNetworkManagerChanged(mock_network_library_);
EXPECT_CALL(*mock_network_library_, ethernet_connected())
......@@ -165,11 +160,11 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Ethernet) {
EXPECT_CALL(*mock_network_library_, Connected())
.Times(3)
.WillRepeatedly(Return(true));
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(network_view->IsConnecting());
EXPECT_FALSE(actor->IsContinueEnabled());
EXPECT_FALSE(actor->IsConnecting());
network_screen->OnNetworkManagerChanged(mock_network_library_);
EXPECT_TRUE(network_view->IsContinueEnabled());
EXPECT_TRUE(actor->IsContinueEnabled());
EmulateContinueButtonExit(network_screen);
}
......@@ -179,8 +174,8 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Wifi) {
ASSERT_TRUE(network_screen != NULL);
ASSERT_EQ(network_screen, controller()->current_screen());
NetworkSelectionView* network_view = network_screen->view();
ASSERT_TRUE(network_view != NULL);
NetworkScreenActor* actor = network_screen->actor();
ASSERT_TRUE(actor != NULL);
EXPECT_CALL(*mock_network_library_, ethernet_connected())
.WillOnce((Return(false)));
......@@ -199,7 +194,7 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Wifi) {
.WillRepeatedly(Return(wifi.get()));
EXPECT_CALL(*mock_network_library_, wifi_networks())
.WillRepeatedly(ReturnRef(wifi_networks));
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(actor->IsContinueEnabled());
network_screen->OnNetworkManagerChanged(mock_network_library_);
EXPECT_CALL(*mock_network_library_, ethernet_connected())
......@@ -207,11 +202,11 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Wifi) {
EXPECT_CALL(*mock_network_library_, Connected())
.Times(3)
.WillRepeatedly(Return(true));
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(network_view->IsConnecting());
EXPECT_FALSE(actor->IsContinueEnabled());
EXPECT_FALSE(actor->IsConnecting());
network_screen->OnNetworkManagerChanged(mock_network_library_);
EXPECT_TRUE(network_view->IsContinueEnabled());
EXPECT_TRUE(actor->IsContinueEnabled());
EmulateContinueButtonExit(network_screen);
}
......@@ -221,8 +216,8 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Cellular) {
ASSERT_TRUE(network_screen != NULL);
ASSERT_EQ(network_screen, controller()->current_screen());
NetworkSelectionView* network_view = network_screen->view();
ASSERT_TRUE(network_view != NULL);
NetworkScreenActor* actor = network_screen->actor();
ASSERT_TRUE(actor != NULL);
EXPECT_CALL(*mock_network_library_, ethernet_connected())
.WillOnce((Return(false)));
......@@ -239,7 +234,7 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Cellular) {
scoped_ptr<CellularNetwork> cellular(new CellularNetwork("cellular"));
EXPECT_CALL(*mock_network_library_, cellular_network())
.WillOnce(Return(cellular.get()));
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(actor->IsContinueEnabled());
network_screen->OnNetworkManagerChanged(mock_network_library_);
EXPECT_CALL(*mock_network_library_, ethernet_connected())
......@@ -247,11 +242,11 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Cellular) {
EXPECT_CALL(*mock_network_library_, Connected())
.Times(3)
.WillRepeatedly(Return(true));
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(network_view->IsConnecting());
EXPECT_FALSE(actor->IsContinueEnabled());
EXPECT_FALSE(actor->IsConnecting());
network_screen->OnNetworkManagerChanged(mock_network_library_);
EXPECT_TRUE(network_view->IsContinueEnabled());
EXPECT_TRUE(actor->IsContinueEnabled());
EmulateContinueButtonExit(network_screen);
}
......@@ -261,8 +256,8 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Timeout) {
ASSERT_TRUE(network_screen != NULL);
ASSERT_EQ(network_screen, controller()->current_screen());
NetworkSelectionView* network_view = network_screen->view();
ASSERT_TRUE(network_view != NULL);
NetworkScreenActor* actor = network_screen->actor();
ASSERT_TRUE(actor != NULL);
EXPECT_CALL(*mock_network_library_, ethernet_connected())
.WillOnce((Return(false)));
......@@ -277,20 +272,20 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Timeout) {
scoped_ptr<WifiNetwork> wifi(new WifiNetwork("wifi"));
EXPECT_CALL(*mock_network_library_, wifi_network())
.WillOnce(Return(wifi.get()));
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(actor->IsContinueEnabled());
network_screen->OnNetworkManagerChanged(mock_network_library_);
EXPECT_CALL(*mock_network_library_, Connected())
.Times(2)
.WillRepeatedly(Return(false));
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(network_view->IsConnecting());
EXPECT_FALSE(actor->IsContinueEnabled());
EXPECT_FALSE(actor->IsConnecting());
network_screen->OnConnectionTimeout();
// Close infobubble with error message - it makes the test stable.
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(network_view->IsConnecting());
network_screen->ClearErrors();
EXPECT_FALSE(actor->IsContinueEnabled());
EXPECT_FALSE(actor->IsConnecting());
actor->ClearErrors();
}
} // namespace chromeos
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SCREEN_DELEGATE_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SCREEN_DELEGATE_H_
#pragma once
#include "chrome/browser/chromeos/cros/network_library.h"
#include "views/controls/button/button.h"
namespace gfx {
class Size;
} // namespace gfx
namespace chromeos {
class KeyboardSwitchMenu;
class LanguageSwitchMenu;
// Interface that NetworkScreen exposes to the NetworkSelectionView.
class NetworkScreenDelegate : public views::ButtonListener,
public NetworkLibrary::NetworkManagerObserver {
public:
// Cleares all error notifications.
virtual void ClearErrors() = 0;
// True is MessageBubble with error message is shown.
virtual bool is_error_shown() = 0;
virtual LanguageSwitchMenu* language_switch_menu() = 0;
virtual KeyboardSwitchMenu* keyboard_switch_menu() = 0;
virtual gfx::Size size() const = 0;
protected:
virtual ~NetworkScreenDelegate() {}
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SCREEN_DELEGATE_H_
......@@ -13,9 +13,9 @@
#include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/keyboard_switch_menu.h"
#include "chrome/browser/chromeos/login/language_switch_menu.h"
#include "chrome/browser/chromeos/login/network_screen_delegate.h"
#include "chrome/browser/chromeos/login/proxy_settings_dialog.h"
#include "chrome/browser/chromeos/login/rounded_rect_painter.h"
#include "chrome/browser/chromeos/login/views_network_screen_actor.h"
#include "chrome/browser/chromeos/login/wizard_accessibility_helper.h"
#include "chrome/browser/chromeos/status/network_dropdown_button.h"
#include "grit/chromium_strings.h"
......@@ -104,18 +104,18 @@ class NetworkControlReportOnActivate : public NetworkDropdownButton {
public:
NetworkControlReportOnActivate(bool browser_mode,
gfx::NativeWindow parent_window,
NetworkScreenDelegate* delegate)
ViewsNetworkScreenActor* actor)
: NetworkDropdownButton(browser_mode, parent_window),
delegate_(delegate) {}
actor_(actor) {}
// Overridden from MenuButton:
virtual bool Activate() {
delegate_->ClearErrors();
actor_->ClearErrors();
return MenuButton::Activate();
}
private:
NetworkScreenDelegate* delegate_;
ViewsNetworkScreenActor* actor_;
DISALLOW_COPY_AND_ASSIGN(NetworkControlReportOnActivate);
};
......@@ -127,24 +127,24 @@ class NotifyingMenuButton : public DropDownButton {
const std::wstring& text,
views::ViewMenuDelegate* menu_delegate,
bool show_menu_marker,
NetworkScreenDelegate* delegate)
ViewsNetworkScreenActor* actor)
: DropDownButton(listener, text, menu_delegate, show_menu_marker),
delegate_(delegate) {}
actor_(actor) {}
// Overridden from View:
virtual void OnFocus() OVERRIDE {
delegate_->ClearErrors();
actor_->ClearErrors();
GetWidget()->NotifyAccessibilityEvent(
this, ui::AccessibilityTypes::EVENT_FOCUS, true);
}
private:
NetworkScreenDelegate* delegate_;
ViewsNetworkScreenActor* actor_;
DISALLOW_COPY_AND_ASSIGN(NotifyingMenuButton);
};
NetworkSelectionView::NetworkSelectionView(NetworkScreenDelegate* delegate)
NetworkSelectionView::NetworkSelectionView(ViewsNetworkScreenActor* actor)
: entire_screen_view_(NULL),
contents_view_(NULL),
languages_menubutton_(NULL),
......@@ -159,7 +159,7 @@ NetworkSelectionView::NetworkSelectionView(NetworkScreenDelegate* delegate)
throbber_(CreateDefaultSmoothedThrobber()),
proxy_settings_link_(NULL),
show_keyboard_button_(false),
delegate_(delegate) {
actor_(actor) {
}
NetworkSelectionView::~NetworkSelectionView() {
......@@ -217,7 +217,7 @@ void NetworkSelectionView::AddControlsToLayout(
}
void NetworkSelectionView::InitLayout() {
gfx::Size screen_size = delegate_->size();
gfx::Size screen_size = actor_->GetScreenSize();
const int widest_label = std::max(
std::max(
select_language_label_->GetPreferredSize().width(),
......@@ -225,9 +225,9 @@ void NetworkSelectionView::InitLayout() {
select_network_label_->GetPreferredSize().width());
const int dropdown_width = screen_size.width() - 2 * kBorderSize -
2 * kPaddingColumnWidth - kMediumPaddingColumnWidth - widest_label;
delegate_->language_switch_menu()->SetFirstLevelMenuWidth(
actor_->language_switch_menu()->SetFirstLevelMenuWidth(
dropdown_width - kMenuWidthOffset);
delegate_->keyboard_switch_menu()->SetMinimumWidth(
actor_->keyboard_switch_menu()->SetMinimumWidth(
dropdown_width - kMenuWidthOffset);
network_dropdown_->SetFirstLevelMenuWidth(dropdown_width - kMenuWidthOffset);
......@@ -296,13 +296,13 @@ void NetworkSelectionView::Init() {
select_language_label_ = new views::Label();
languages_menubutton_ = new NotifyingMenuButton(
NULL, std::wstring(), delegate_->language_switch_menu(), true, delegate_);
NULL, std::wstring(), actor_->language_switch_menu(), true, actor_);
InitMenuButtonProperties(languages_menubutton_);
select_keyboard_label_ = new views::Label();
keyboards_menubutton_ = new DropDownButton(
NULL /* listener */, L"", delegate_->keyboard_switch_menu(),
NULL /* listener */, L"", actor_->keyboard_switch_menu(),
true /* show_menu_marker */);
InitMenuButtonProperties(keyboards_menubutton_);
......@@ -310,7 +310,7 @@ void NetworkSelectionView::Init() {
network_dropdown_ = new NetworkControlReportOnActivate(false,
GetNativeWindow(),
delegate_);
actor_);
InitMenuButtonProperties(network_dropdown_);
connecting_network_label_ = new views::Label();
......@@ -336,10 +336,10 @@ void NetworkSelectionView::UpdateLocalizedStringsAndFonts() {
SetMenuButtonFont(languages_menubutton_, base_font);
languages_menubutton_->SetText(
UTF16ToWide(delegate_->language_switch_menu()->GetCurrentLocaleName()));
UTF16ToWide(actor_->language_switch_menu()->GetCurrentLocaleName()));
SetMenuButtonFont(keyboards_menubutton_, base_font);
keyboards_menubutton_->SetText(
UTF16ToWide(delegate_->keyboard_switch_menu()->GetCurrentKeyboardName()));
UTF16ToWide(actor_->keyboard_switch_menu()->GetCurrentKeyboardName()));
welcome_label_->SetFont(welcome_label_font);
welcome_label_->SetText(
UTF16ToWide(l10n_util::GetStringUTF16(IDS_NETWORK_SELECTION_TITLE)));
......@@ -373,8 +373,8 @@ void NetworkSelectionView::UpdateLocalizedStringsAndFonts() {
// views::View: implementation:
bool NetworkSelectionView::OnKeyPressed(const views::KeyEvent&) {
if (delegate_->is_error_shown()) {
delegate_->ClearErrors();
if (actor_->IsErrorShown()) {
actor_->ClearErrors();
return true;
}
return false;
......@@ -445,7 +445,7 @@ bool NetworkSelectionView::IsContinueEnabled() const {
////////////////////////////////////////////////////////////////////////////////
// views::LinkListener implementation:
void NetworkSelectionView::LinkClicked(views::Link* source, int) {
delegate_->ClearErrors();
actor_->ClearErrors();
if (source == proxy_settings_link_) {
if (!proxy_settings_dialog_.get()) {
proxy_settings_dialog_.reset(
......@@ -464,7 +464,7 @@ void NetworkSelectionView::RecreateNativeControls() {
bool is_continue_enabled = IsContinueEnabled();
delete continue_button_;
continue_button_ = new login::WideButton(
delegate_,
actor_,
UTF16ToWide(
l10n_util::GetStringUTF16(IDS_NETWORK_SELECTION_CONTINUE_BUTTON)));
continue_button_->SetEnabled(is_continue_enabled);
......
......@@ -31,15 +31,15 @@ class Throbber;
namespace chromeos {
class NetworkDropdownButton;
class NetworkScreenDelegate;
class ScreenObserver;
class ViewsNetworkScreenActor;
// View for the network selection/initial welcome screen.
class NetworkSelectionView : public views::View,
public views::LinkListener,
public LoginHtmlDialog::Delegate {
public:
explicit NetworkSelectionView(NetworkScreenDelegate* delegate);
explicit NetworkSelectionView(ViewsNetworkScreenActor* actor);
virtual ~NetworkSelectionView();
// Initialize view layout.
......@@ -119,8 +119,7 @@ class NetworkSelectionView : public views::View,
views::Link* proxy_settings_link_;
bool show_keyboard_button_;
// NetworkScreen delegate.
NetworkScreenDelegate* delegate_;
ViewsNetworkScreenActor* actor_;
// Id of the network that is in process of connecting.
string16 network_id_;
......
......@@ -27,6 +27,7 @@ class ViewScreen : public WizardScreen {
virtual gfx::Size GetScreenSize() const { return size_; }
V* view() { return view_; }
const V* view() const { return view_; }
protected:
// Creates view object and adds it to views hierarchy.
......
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/login/views_network_screen_actor.h"
#include "base/logging.h"
#include "base/string16.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/login/background_view.h"
#include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/help_app_launcher.h"
#include "chrome/browser/chromeos/login/login_utils.h"
#include "chrome/browser/chromeos/login/network_screen_actor.h"
#include "chrome/browser/chromeos/login/network_selection_view.h"
#include "chrome/browser/chromeos/login/screen_observer.h"
#include "chrome/browser/chromeos/login/wizard_screen.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "views/controls/menu/menu_2.h"
namespace {
// Considering 10px shadow from each side & welcome title height at 30px.
const int kWelcomeScreenWidth = 580;
const int kWelcomeScreenHeight = 335;
} // namespace
namespace chromeos {
///////////////////////////////////////////////////////////////////////////////
// ViewsNetworkScreenActor, public:
ViewsNetworkScreenActor::ViewsNetworkScreenActor(
WizardScreenDelegate* delegate,
Delegate* screen)
: ViewScreen<NetworkSelectionView>(
delegate,
kWelcomeScreenWidth,
kWelcomeScreenHeight),
bubble_(NULL),
screen_(screen) {
language_switch_menu_.set_menu_alignment(views::Menu2::ALIGN_TOPLEFT);
}
ViewsNetworkScreenActor::~ViewsNetworkScreenActor() {
ClearErrors();
}
bool ViewsNetworkScreenActor::IsErrorShown() const {
return bubble_ != NULL;
}
////////////////////////////////////////////////////////////////////////////////
// ViewsNetworkScreenActor, NetworkScreenActor implementation:
void ViewsNetworkScreenActor::Show() {
ViewScreen<NetworkSelectionView>::Show();
}
void ViewsNetworkScreenActor::Hide() {
ViewScreen<NetworkSelectionView>::Hide();
}
gfx::Size ViewsNetworkScreenActor::GetScreenSize() const {
return ViewScreen<NetworkSelectionView>::GetScreenSize();
}
void ViewsNetworkScreenActor::ShowError(const string16& message) {
if (!view()->is_dialog_open() &&
!(help_app_.get() && help_app_->is_open())) {
ClearErrors();
views::View* network_control = view()->GetNetworkControlView();
bubble_ = MessageBubble::Show(
network_control->GetWidget(),
network_control->GetScreenBounds(),
BubbleBorder::LEFT_TOP,
ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING),
UTF16ToWide(message),
UTF16ToWide(l10n_util::GetStringUTF16(IDS_LEARN_MORE)),
this);
network_control->RequestFocus();
}
}
void ViewsNetworkScreenActor::ClearErrors() {
// bubble_ will be set to NULL in callback.
if (bubble_)
bubble_->Close();
}
void ViewsNetworkScreenActor::ShowConnectingStatus(
bool connecting,
const string16& network_id) {
DCHECK(view());
if (view())
view()->ShowConnectingStatus(connecting, network_id);
}
void ViewsNetworkScreenActor::EnableContinue(bool enabled) {
DCHECK(view());
if (view())
view()->EnableContinue(enabled);
}
bool ViewsNetworkScreenActor::IsContinueEnabled() const {
DCHECK(view());
if (view())
return view()->IsContinueEnabled();
return false;
}
bool ViewsNetworkScreenActor::IsConnecting() const {
DCHECK(view());
if (view())
return view()->IsConnecting();
return false;
}
///////////////////////////////////////////////////////////////////////////////
// views::ButtonListener implementation:
void ViewsNetworkScreenActor::ButtonPressed(views::Button* sender,
const views::Event& event) {
ClearErrors();
screen_->OnContinuePressed();
}
///////////////////////////////////////////////////////////////////////////////
// ViewsNetworkScreenActor, views::BubbleDelegate implementation:
void ViewsNetworkScreenActor::BubbleClosing(Bubble* bubble,
bool closed_by_escape) {
bubble_ = NULL;
}
bool ViewsNetworkScreenActor::CloseOnEscape() {
return true;
}
bool ViewsNetworkScreenActor::FadeInOnShow() {
return false;
}
void ViewsNetworkScreenActor::OnHelpLinkActivated() {
ClearErrors();
if (!help_app_.get()) {
help_app_ = new HelpAppLauncher(
LoginUtils::Get()->GetBackgroundView()->GetNativeWindow());
}
help_app_->ShowHelpTopic(HelpAppLauncher::HELP_CONNECTIVITY);
}
///////////////////////////////////////////////////////////////////////////////
// ViewsNetworkScreenActor, ViewScreen implementation:
void ViewsNetworkScreenActor::CreateView() {
language_switch_menu_.InitLanguageMenu();
ViewScreen<NetworkSelectionView>::CreateView();
}
NetworkSelectionView* ViewsNetworkScreenActor::AllocateView() {
return new NetworkSelectionView(this);
}
} // namespace chromeos
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_NETWORK_SCREEN_ACTOR_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_NETWORK_SCREEN_ACTOR_H_
#pragma once
#include "base/memory/ref_counted.h"
#include "base/string16.h"
#include "base/task.h"
#include "base/timer.h"
#include "chrome/browser/chromeos/cros/network_library.h"
#include "chrome/browser/chromeos/login/keyboard_switch_menu.h"
#include "chrome/browser/chromeos/login/language_switch_menu.h"
#include "chrome/browser/chromeos/login/message_bubble.h"
#include "chrome/browser/chromeos/login/network_screen_actor.h"
#include "chrome/browser/chromeos/login/network_selection_view.h"
#include "chrome/browser/chromeos/login/view_screen.h"
#include "chrome/browser/chromeos/options/network_config_view.h"
#include "views/controls/button/button.h"
namespace chromeos {
class HelpAppLauncher;
class WizardScreenDelegate;
// Views-specific implementation of NetworkScreenActor. Hosts
// NetworkSelectionView.
class ViewsNetworkScreenActor : public ViewScreen<NetworkSelectionView>,
public MessageBubbleDelegate,
public NetworkScreenActor,
public views::ButtonListener {
public:
ViewsNetworkScreenActor(WizardScreenDelegate* delegate,
Delegate* screen);
virtual ~ViewsNetworkScreenActor();
// NetworkScreenActor implementation:
virtual void Show();
virtual void Hide();
virtual gfx::Size GetScreenSize() const;
virtual void ShowError(const string16& message);
virtual void ClearErrors();
virtual void ShowConnectingStatus(
bool connecting,
const string16& network_id);
virtual void EnableContinue(bool enabled);
virtual bool IsContinueEnabled() const;
virtual bool IsConnecting() const;
// views::ButtonListener implementation:
virtual void ButtonPressed(views::Button* sender, const views::Event& event);
// Returns true if a bubble with error is shown currently to the user.
bool IsErrorShown() const;
// TODO(avayvod): Get rid of the dependency on the menus by moving it
// either to the view or here.
LanguageSwitchMenu* language_switch_menu() {
return &language_switch_menu_;
}
KeyboardSwitchMenu* keyboard_switch_menu() {
return &keyboard_switch_menu_;
}
private:
// Overridden views::BubbleDelegate.
virtual void BubbleClosing(Bubble* bubble, bool closed_by_escape);
virtual bool CloseOnEscape();
virtual bool FadeInOnShow();
virtual void OnHelpLinkActivated();
// ViewScreen implementation:
virtual void CreateView();
virtual NetworkSelectionView* AllocateView();
LanguageSwitchMenu language_switch_menu_;
KeyboardSwitchMenu keyboard_switch_menu_;
// Pointer to shown message bubble. We don't need to delete it because
// it will be deleted on bubble closing.
MessageBubble* bubble_;
// Help application used for help dialogs.
scoped_refptr<HelpAppLauncher> help_app_;
// Listener for continue button to be pressed.
Delegate* screen_;
DISALLOW_COPY_AND_ASSIGN(ViewsNetworkScreenActor);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_NETWORK_SCREEN_ACTOR_H_
......@@ -6,10 +6,6 @@
#define CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_SCREEN_H_
#pragma once
class WizardScreen;
namespace chromeos {
class ScreenObserver;
} // namespace chromeos
namespace gfx {
class Size;
} // namespace gfx
......@@ -17,6 +13,11 @@ namespace views {
class View;
} // namespace views
namespace chromeos {
class ScreenObserver;
class WizardScreen;
// Interface that login wizard exposes to its screens.
class WizardScreenDelegate {
public:
......@@ -24,7 +25,7 @@ class WizardScreenDelegate {
virtual views::View* GetWizardView() = 0;
// Returns observer screen should notify.
virtual chromeos::ScreenObserver* GetObserver(WizardScreen* screen) = 0;
virtual ScreenObserver* GetObserver(WizardScreen* screen) = 0;
// Forces the current screen to be shown immediately.
virtual void ShowCurrentScreen() = 0;
......@@ -54,4 +55,10 @@ class WizardScreen {
WizardScreenDelegate* delegate_;
};
} // namespace chromeos
// TODO(avayvod): Fix all places where namespace is not used.
using chromeos::WizardScreenDelegate;
using chromeos::WizardScreen;
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_SCREEN_H_
......@@ -532,7 +532,7 @@
'browser/chromeos/login/message_bubble.h',
'browser/chromeos/login/network_screen.cc',
'browser/chromeos/login/network_screen.h',
'browser/chromeos/login/network_screen_delegate.h',
'browser/chromeos/login/network_screen_actor.h',
'browser/chromeos/login/network_selection_view.cc',
'browser/chromeos/login/network_selection_view.h',
'browser/chromeos/login/new_user_view.cc',
......@@ -603,6 +603,8 @@
'browser/chromeos/login/views_login_display.h',
'browser/chromeos/login/views_login_display_host.cc',
'browser/chromeos/login/views_login_display_host.h',
'browser/chromeos/login/views_network_screen_actor.cc',
'browser/chromeos/login/views_network_screen_actor.h',
'browser/chromeos/login/views_update_screen_actor.cc',
'browser/chromeos/login/views_update_screen_actor.h',
'browser/chromeos/login/base_login_display_host.h',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment