[cros] Make disconnected icons used by network drop-down and network button consistent.

BUG=chromium-os:20789
TEST=manual


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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112195 0039d316-1c4b-4281-b951-d872f2087c98
parent f5fb1750
......@@ -44,6 +44,11 @@ class NetworkMenuIcon : public ui::AnimationDelegate {
NetworkMenuIcon(Delegate* delegate, Mode mode);
virtual ~NetworkMenuIcon();
// Setter for |last_network_type_|
void set_last_network_type(ConnectionType last_network_type) {
last_network_type_ = last_network_type;
}
// Generates and returns the icon bitmap. This will never return NULL.
// Also sets |text| if not NULL. Behavior varies depending on |mode_|.
const SkBitmap GetIconAndText(string16* text);
......
......@@ -84,8 +84,9 @@ cr.define('login', function() {
* @param {Integer} state Current state of the network (see NET_STATE).
* @param {string} network Name of the network.
* @param {string} reason Reason the callback was called.
* @param {int} last Last active network type.
*/
HeaderBar.handleAddUser = function(state, network, reason) {
HeaderBar.handleAddUser = function(state, network, reason, last) {
if (state != NET_STATE.OFFLINE) {
Oobe.showSigninUI();
} else {
......@@ -101,8 +102,9 @@ cr.define('login', function() {
* @param {Integer} state Current state of the network (see NET_STATE).
* @param {string} network Name of the network.
* @param {string} reason Reason the callback was called.
* @param {int} last Last active network type.
*/
HeaderBar.bubbleWatchdog = function(state, network, reason) {
HeaderBar.bubbleWatchdog = function(state, network, reason, last) {
if (state != NET_STATE.OFFLINE) {
$('bubble').hideForElement($('add-user-button'));
chrome.send('loginRemoveNetworkStateObserver',
......
......@@ -369,25 +369,31 @@ cr.define('cr.ui', function() {
};
/**
* Activates or deactivates network drop-down. Only one network drop-down
* Activates network drop-down. Only one network drop-down
* can be active at the same time. So activating new drop-down deactivates
* the previous one. Deactivating not active drop-down does nothing.
* @param {string} element_id Id of the element which is network drop-down.
* @param {boolean} isActive Is drop-down active?
* @param {boolean} isOobe Is dropdown placed on an OOBE screen.
* the previous one.
* @param {string} elementId Id of network drop-down element.
* @param {boolean} isOobe Whether drop-down is used by an Oobe screen.
* @param {integer} lastNetworkType Last active network type. Pass -1 if it
* isn't known.
*/
DropDown.setActive = function(elementId, isActive, isOobe) {
if (isActive) {
$(elementId).isShown = false;
if (DropDown.activeElementId_ != elementId) {
DropDown.activeElementId_ = elementId;
chrome.send('networkDropdownShow', [elementId, isOobe]);
}
} else {
if (DropDown.activeElementId_ == elementId) {
DropDown.activeElementId_ = '';
chrome.send('networkDropdownHide', []);
}
DropDown.show = function(elementId, isOobe, lastNetworkType) {
$(elementId).isShown = false;
if (DropDown.activeElementId_ != elementId) {
DropDown.activeElementId_ = elementId;
chrome.send('networkDropdownShow', [elementId, isOobe, lastNetworkType]);
}
};
/**
* Deactivates network drop-down. Deactivating inactive drop-down does
* nothing.
* @param {string} elementId Id of network drop-down element.
*/
DropDown.hide = function(elementId) {
if (DropDown.activeElementId_ == elementId) {
DropDown.activeElementId_ = '';
chrome.send('networkDropdownHide', []);
}
};
......
......@@ -46,11 +46,11 @@ cr.define('oobe', function() {
},
onBeforeShow: function(data) {
cr.ui.DropDown.setActive('networks-list', true, true);
cr.ui.DropDown.show('networks-list', true, -1);
},
onBeforeHide: function() {
cr.ui.DropDown.setActive('networks-list', false, true);
cr.ui.DropDown.hide('networks-list');
},
/**
......
......@@ -67,23 +67,6 @@ cr.define('login', function() {
this.updateLocalizedContent_();
},
onBeforeShow: function() {
cr.ui.DropDown.setActive('offline-networks-list', true, false);
$('error-guest-signin').hidden = $('guestSignin').hidden ||
!$('add-user-header-bar-item').hidden;
},
onBeforeHide: function() {
cr.ui.DropDown.setActive('offline-networks-list', false, false);
},
update: function() {
chrome.send('loginRequestNetworkState',
['login.ErrorMessageScreen.updateState',
'update']);
},
/**
* Updates localized content of the screen that is not updated via template.
*/
......@@ -117,10 +100,31 @@ cr.define('login', function() {
};
},
onBeforeShow: function(lastNetworkType) {
cr.ui.DropDown.show('offline-networks-list', false, lastNetworkType);
$('error-guest-signin').hidden = $('guestSignin').hidden ||
!$('add-user-header-bar-item').hidden;
},
onBeforeHide: function() {
cr.ui.DropDown.hide('offline-networks-list');
},
update: function() {
chrome.send('loginRequestNetworkState',
['login.ErrorMessageScreen.updateState',
'update']);
},
/**
* Shows or hides offline message based on network on/offline state.
* @param {Integer} state Current state of the network (see NET_STATE).
* @param {string} network Name of the current network.
* @param {string} reason Reason the callback was called.
* @param {int} lastNetworkType Last active network type.
*/
updateState_: function(state, network, reason) {
updateState_: function(state, network, reason, lastNetworkType) {
var currentScreen = Oobe.getInstance().currentScreen;
var offlineMessage = this;
var isOnline = (state == NET_STATE.ONLINE);
......@@ -141,7 +145,7 @@ cr.define('login', function() {
console.log('Show offline message, state=' + state +
', network=' + network +
', isUnderCaptivePortal=' + isUnderCaptivePortal);
offlineMessage.onBeforeShow();
offlineMessage.onBeforeShow(lastNetworkType);
if (isUnderCaptivePortal) {
if (isProxyError) {
......@@ -197,9 +201,11 @@ cr.define('login', function() {
* @param {Integer} state Current state of the network (see NET_STATE).
* @param {string} network Name of the current network.
* @param {string} reason Reason the callback was called.
* @param {int} lastNetworkType Last active network type.
*/
ErrorMessageScreen.updateState = function(state, network, reason) {
$('error-message').updateState_(state, network, reason);
ErrorMessageScreen.updateState = function(
state, network, reason, lastNetworkType) {
$('error-message').updateState_(state, network, reason, lastNetworkType);
};
/**
......
......@@ -93,7 +93,8 @@ base::ListValue* NetworkMenuWebUI::ConvertMenuModel(ui::MenuModel* model) {
// NetworkDropdown -------------------------------------------------------------
NetworkDropdown::NetworkDropdown(WebUI* web_ui,
gfx::NativeWindow parent_window, bool oobe)
gfx::NativeWindow parent_window,
bool oobe)
: parent_window_(parent_window),
web_ui_(web_ui),
oobe_(oobe) {
......@@ -108,6 +109,10 @@ NetworkDropdown::~NetworkDropdown() {
CrosLibrary::Get()->GetNetworkLibrary()->RemoveNetworkManagerObserver(this);
}
void NetworkDropdown::SetLastNetworkType(ConnectionType last_network_type) {
network_icon_->set_last_network_type(last_network_type);
}
void NetworkDropdown::OnItemChosen(int id) {
network_menu_->OnItemChosen(id);
}
......
......@@ -25,6 +25,9 @@ class NetworkDropdown : public NetworkMenu::Delegate,
NetworkDropdown(WebUI* web_ui, gfx::NativeWindow parent_window, bool oobe);
virtual ~NetworkDropdown();
// Sets last active network type. Used to show correct disconnected icon.
void SetLastNetworkType(ConnectionType last_network_type);
// This method should be called, when item with the given id is chosen.
void OnItemChosen(int id);
......
......@@ -6,6 +6,8 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/values.h"
#include "chrome/browser/chromeos/cros/network_library.h"
#include "chrome/browser/chromeos/login/webui_login_display.h"
#include "chrome/browser/ui/webui/chromeos/login/network_dropdown.h"
#include "content/browser/webui/web_ui.h"
......@@ -66,7 +68,7 @@ void NetworkDropdownHandler::HandleNetworkItemChosen(
void NetworkDropdownHandler::HandleNetworkDropdownShow(
const base::ListValue* args) {
DCHECK(args->GetSize() == 2);
DCHECK(args->GetSize() == 3);
std::string element_id;
if (!args->GetString(0, &element_id))
NOTREACHED();
......@@ -74,7 +76,17 @@ void NetworkDropdownHandler::HandleNetworkDropdownShow(
if (!args->GetBoolean(1, &oobe))
NOTREACHED();
double last_network_type = -1; // Javascript passes integer as double.
if (!args->GetDouble(2, &last_network_type))
NOTREACHED();
dropdown_.reset(new NetworkDropdown(web_ui_, GetNativeWindow(), oobe));
if (last_network_type >= 0) {
dropdown_->SetLastNetworkType(
static_cast<ConnectionType>(last_network_type));
}
}
void NetworkDropdownHandler::HandleNetworkDropdownHide(
......
......@@ -105,7 +105,8 @@ class NetworkStateInformer
// Removes observer's callback.
void RemoveObserver(const std::string& callback);
// Sends current network state, network name and reason using the callback.
// Sends current network state, network name, reason and last network type
// using the callback.
void SendState(const std::string& callback, const std::string& reason);
// NetworkLibrary::NetworkManagerObserver implementation:
......@@ -125,6 +126,7 @@ class NetworkStateInformer
content::NotificationRegistrar registrar_;
base::hash_set<std::string> observers_;
std::string active_network_;
ConnectionType last_network_type_;
std::string network_name_;
State state_;
WebUI* web_ui_;
......@@ -132,7 +134,10 @@ class NetworkStateInformer
// NetworkStateInformer implementation -----------------------------------------
NetworkStateInformer::NetworkStateInformer(WebUI* web_ui) : web_ui_(web_ui) {
NetworkStateInformer::NetworkStateInformer(WebUI* web_ui)
: last_network_type_(TYPE_WIFI),
state_(OFFLINE),
web_ui_(web_ui) {
NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
UpdateState(cros);
cros->AddNetworkManagerObserver(this);
......@@ -159,8 +164,9 @@ void NetworkStateInformer::SendState(const std::string& callback,
base::FundamentalValue state_value(state_);
base::StringValue network_value(network_name_);
base::StringValue reason_value(reason);
web_ui_->CallJavascriptFunction(callback, state_value,
network_value, reason_value);
base::FundamentalValue last_network_value(last_network_type_);
web_ui_->CallJavascriptFunction(callback, state_value, network_value,
reason_value, last_network_value);
}
void NetworkStateInformer::OnNetworkManagerChanged(NetworkLibrary* cros) {
......@@ -178,6 +184,9 @@ void NetworkStateInformer::Observe(
}
bool NetworkStateInformer::UpdateState(NetworkLibrary* cros) {
if (cros->active_network())
last_network_type_ = cros->active_network()->type();
State new_state;
std::string new_active_network;
if (!cros->Connected()) {
......
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