0

network-list: New subText for carrier locked

- Changes to add new cellular sub text when SIM is carrier locked.
UX -
https://docs.google.com/presentation/d/1lz6MT8S6b43omOQ8WCmKPlSWXKjW-fGtKBTTKi5gMxE/edit?resourcekey=0-4nMoXfvIeEkayQqkxEbf4A#slide=id.g18deeae35d3_0_26

Bug: b:294133684
Change-Id: Ib97f8b56ad7a95e0323059a9f208ae0d2c559eea
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4785928
Commit-Queue: Ujjwal Pande <ujjwalpande@google.com>
Reviewed-by: Gordon Seto <gordonseto@google.com>
Cr-Commit-Position: refs/heads/main@{#1195132}
This commit is contained in:
Ujjwal Pande
2023-09-12 01:06:02 +00:00
committed by Chromium LUCI CQ
parent 42db24bc76
commit 7285d0c1fb
6 changed files with 132 additions and 0 deletions

@ -2843,6 +2843,9 @@ Some features are limited to increase battery life.
</message>
<message name="IDS_ASH_STATUS_TRAY_NETWORK_STATUS_CLICK_TO_UNLOCK" desc="The label used in quick settings to indicate a cellular network is locked and clicking on it will open unlock dialog in ChromeOS settings. [CHAR_LIMIT=29]">
Click to unlock
</message>
<message name="IDS_ASH_STATUS_TRAY_NETWORK_STATUS_CARRIER_LOCKED" desc="The label used in quick settings to indicate a cellular network is carrier locked. [CHAR_LIMIT=29]">
Locked by provider
</message>
<message name="IDS_ASH_STATUS_TRAY_NETWORK_STATUS_SIGN_IN_TO_UNLOCK" desc="The label used in quick settings to indicate a cellular network is locked, after signing in the user can unlock the network. [CHAR_LIMIT=29]">
Sign in to unlock

@ -0,0 +1 @@
6ae86d18b4a34f55896a20181544af8ef6e2189e

@ -6,6 +6,7 @@
#include <memory>
#include "ash/constants/ash_features.h"
#include "ash/public/cpp/bluetooth_config_service.h"
#include "ash/public/cpp/system_tray_client.h"
#include "ash/session/session_controller_impl.h"
@ -158,6 +159,14 @@ void NetworkDetailedViewController::OnNetworkListItemSelected(
if (!Shell::Get()->session_controller()->ShouldEnableSettings()) {
return;
}
// It is not possible to unlock the carrier locked device by entering the
// pin on UI as unlock flow is triggered by simLock server
if (features::IsCellularCarrierLockEnabled()) {
if (network->type_state->get_cellular()->sim_lock_type ==
"network-pin") {
return;
}
}
RecordNetworkRowClickedAction(
NetworkRowClickedAction::kOpenSimUnlockDialog);
Shell::Get()->system_tray_model()->client()->ShowSettingsSimUnlock();

@ -6,6 +6,7 @@
#include <memory>
#include "ash/constants/ash_features.h"
#include "ash/public/cpp/test/test_system_tray_client.h"
#include "ash/shell.h"
#include "ash/system/network/network_utils.h"
@ -14,6 +15,7 @@
#include "base/strings/strcat.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/metrics/user_action_tester.h"
#include "base/test/scoped_feature_list.h"
#include "chromeos/ash/components/network/network_connect.h"
#include "chromeos/ash/components/network/network_handler.h"
#include "chromeos/ash/components/network/network_state_handler.h"
@ -382,6 +384,68 @@ TEST_F(NetworkDetailedViewControllerTest, CellularNetworkListItemSelected) {
/*count=*/1u, /*total_count=*/2u);
}
TEST_F(NetworkDetailedViewControllerTest,
CarrierLockedNetworkListItemSelected) {
base::UserActionTester user_action_tester;
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(features::kCellularCarrierLock);
EXPECT_EQ(0, user_action_tester.GetActionCount(kNetworkConnectionDetails));
EXPECT_EQ(0, user_action_tester.GetActionCount(kNetworkConnectConfigured));
EXPECT_EQ(0, GetSystemTrayClient()->show_network_settings_count());
EXPECT_EQ(0, GetSystemTrayClient()->show_sim_unlock_settings_count());
CheckRowClickedActionHistogramBuckets(
NetworkRowClickedAction::kOpenNetworkSettingsPage,
/*count=*/0u, /*total_count=*/0u);
CheckRowClickedActionHistogramBuckets(
NetworkRowClickedAction::kOpenSimUnlockDialog,
/*count=*/0u, /*total_count=*/0u);
NetworkStatePropertiesPtr cellular_network =
CreateStandaloneNetworkProperties(kCellular, NetworkType::kCellular,
ConnectionStateType::kConnected);
// When cellular network is carrier locked, verify that SIM unlock
// settings page is NOT displayed. Device will be unlocked only through
// carrier lock manager.
cellular_network->type_state->get_cellular()->sim_locked = true;
cellular_network->type_state->get_cellular()->sim_lock_type = "network-pin";
SelectNetworkListItem(cellular_network);
EXPECT_EQ(0, GetSystemTrayClient()->show_sim_unlock_settings_count());
}
TEST_F(NetworkDetailedViewControllerTest,
CarrierLockedNetworkListItemSelectedFeatureDisabled) {
base::UserActionTester user_action_tester;
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndDisableFeature(features::kCellularCarrierLock);
EXPECT_EQ(0, user_action_tester.GetActionCount(kNetworkConnectionDetails));
EXPECT_EQ(0, user_action_tester.GetActionCount(kNetworkConnectConfigured));
EXPECT_EQ(0, GetSystemTrayClient()->show_network_settings_count());
EXPECT_EQ(0, GetSystemTrayClient()->show_sim_unlock_settings_count());
CheckRowClickedActionHistogramBuckets(
NetworkRowClickedAction::kOpenNetworkSettingsPage,
/*count=*/0u, /*total_count=*/0u);
CheckRowClickedActionHistogramBuckets(
NetworkRowClickedAction::kOpenSimUnlockDialog,
/*count=*/0u, /*total_count=*/0u);
NetworkStatePropertiesPtr cellular_network =
CreateStandaloneNetworkProperties(kCellular, NetworkType::kCellular,
ConnectionStateType::kConnected);
// With feature flag disabled verify that When cellular
// network is carrier locked SIM unlock
// settings page is displayed.
cellular_network->type_state->get_cellular()->sim_locked = true;
cellular_network->type_state->get_cellular()->sim_lock_type = "network-pin";
SelectNetworkListItem(cellular_network);
EXPECT_EQ(1, GetSystemTrayClient()->show_sim_unlock_settings_count());
}
TEST_F(NetworkDetailedViewControllerTest, WifiNetworkListItemSelected) {
base::UserActionTester user_action_tester;

@ -100,6 +100,16 @@ bool IsCellularNetworkSimLocked(
return network_properties->type_state->get_cellular()->sim_locked;
}
bool IsCellularNetworkCarrierLocked(
const NetworkStatePropertiesPtr& network_properties) {
CHECK(features::IsCellularCarrierLockEnabled());
CHECK(
NetworkTypeMatchesType(network_properties->type, NetworkType::kCellular));
return network_properties->type_state->get_cellular()->sim_locked &&
network_properties->type_state->get_cellular()->sim_lock_type ==
"network-pin";
}
bool IsNetworkConnectable(const NetworkStatePropertiesPtr& network_properties) {
// The network must not already be connected to be able to be connected to.
if (network_properties->connection_state !=
@ -219,6 +229,12 @@ gfx::ImageSkia GetNetworkImageForNetwork(
int GetCellularNetworkSubText(
const NetworkStatePropertiesPtr& network_properties) {
if (features::IsCellularCarrierLockEnabled()) {
if (IsCellularNetworkCarrierLocked(network_properties)) {
return IDS_ASH_STATUS_TRAY_NETWORK_STATUS_CARRIER_LOCKED;
}
}
if (IsCellularNetworkUnActivated(network_properties)) {
if (Shell::Get()->session_controller()->login_status() ==
LoginStatus::NOT_LOGGED_IN) {
@ -539,6 +555,12 @@ std::u16string
NetworkListNetworkItemView::GenerateAccessibilityDescriptionForCellular(
const std::u16string& connection_status,
int signal_strength) {
if (features::IsCellularCarrierLockEnabled()) {
if (IsCellularNetworkCarrierLocked(network_properties())) {
return l10n_util::GetStringUTF16(
IDS_ASH_STATUS_TRAY_NETWORK_STATUS_CARRIER_LOCKED);
}
}
if (IsCellularNetworkUnActivated(network_properties())) {
if (Shell::Get()->session_controller()->login_status() ==
LoginStatus::NOT_LOGGED_IN) {

@ -306,6 +306,39 @@ TEST_P(NetworkListNetworkItemViewTest, HasCorrectCellularSublabel) {
network_list_network_item_view()->sub_text_label()->GetText());
}
TEST_P(NetworkListNetworkItemViewTest, HasCorrectCarrierLockSublabel) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(features::kCellularCarrierLock);
EXPECT_FALSE(network_list_network_item_view()->sub_text_label());
NetworkStatePropertiesPtr cellular_network =
CreateStandaloneNetworkProperties(kCellularName, NetworkType::kCellular,
ConnectionStateType::kConnected);
// Label for carrier locked cellular network.
cellular_network->type_state->get_cellular()->sim_locked = true;
cellular_network->type_state->get_cellular()->sim_lock_type = "network-pin";
UpdateViewForNetwork(cellular_network);
EXPECT_EQ(l10n_util::GetStringUTF16(
IDS_ASH_STATUS_TRAY_NETWORK_STATUS_CARRIER_LOCKED),
network_list_network_item_view()->sub_text_label()->GetText());
}
TEST_P(NetworkListNetworkItemViewTest,
HasCorrectCarrierLockSublabelFeatureDisable) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndDisableFeature(features::kCellularCarrierLock);
EXPECT_FALSE(network_list_network_item_view()->sub_text_label());
NetworkStatePropertiesPtr cellular_network =
CreateStandaloneNetworkProperties(kCellularName, NetworkType::kCellular,
ConnectionStateType::kConnected);
// When feature is disabled, existing string should be displayed
cellular_network->type_state->get_cellular()->sim_locked = true;
cellular_network->type_state->get_cellular()->sim_lock_type = "network-pin";
UpdateViewForNetwork(cellular_network);
EXPECT_EQ(l10n_util::GetStringUTF16(
IDS_ASH_STATUS_TRAY_NETWORK_STATUS_CLICK_TO_UNLOCK),
network_list_network_item_view()->sub_text_label()->GetText());
}
TEST_P(NetworkListNetworkItemViewTest, HasCorrectPortalSublabel) {
EXPECT_FALSE(network_list_network_item_view()->sub_text_label());