[CrOS Hotspot] Notify users about hotspot inactivity
Hotspot is disabled if there are no active connections for few minutes and these changes will surface a notification if that happens. Screenshot: https://screenshot.googleplex.com/7GZiFYjp4TNXhWs Bug: b/269354043 Change-Id: I2ebea8dde76abbf2cc3ea59478061d06754d4474 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4333777 Reviewed-by: Jason Zhang <jiajunz@google.com> Commit-Queue: Nikhil Nayunigari <nikhilcn@google.com> Cr-Commit-Position: refs/heads/main@{#1128104}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
3f2782a50d
commit
104e7ca953
@ -2578,6 +2578,9 @@ Connect your device to power.
|
||||
<message name="IDS_ASH_HOTSPOT_OFF_TITLE" desc="Title used for the system notification shown when the hotspot is turned off.">
|
||||
Hotspot is off
|
||||
</message>
|
||||
<message name="IDS_ASH_HOTSPOT_NOTIFICATION_TURN_ON_BUTTON" desc="The label used as the button to turn on hotspot.">
|
||||
Turn on hotspot
|
||||
</message>
|
||||
<message name="IDS_ASH_HOTSPOT_WIFI_TURNED_OFF_MESSAGE" desc="Message displayed in the system notification shown when WiFi is turned off upon enabling hotspot.">
|
||||
We've turned off the WiFi to start using Hotspot through Mobile data. This may incur data costs.
|
||||
</message>
|
||||
@ -2587,6 +2590,9 @@ Connect your device to power.
|
||||
<message name="IDS_ASH_HOTSPOT_ADMIN_RESTRICTED_MESSAGE" desc="Message displayed in the system notification shown when the hotspot is turned off by the administrator.">
|
||||
Your administrator has turned Hotspot off.
|
||||
</message>
|
||||
<message name="IDS_ASH_HOTSPOT_AUTO_DISABLED_MESSAGE" desc="Message displayed in the system notification shown when the hotspot is turned off due to inactivity.">
|
||||
Due to inactivity, hotspot has been turned off.
|
||||
</message>
|
||||
<message name="IDS_ASH_NETWORK_AUTOCONNECT" desc="Text used for the toast shown when a network has been auto-connected (e.g., when an enterprise policy is applied which initiates a connection to a corporate network like Google-A).">
|
||||
We've switched you to a better network
|
||||
</message>
|
||||
|
@ -0,0 +1 @@
|
||||
25aa7efe92368f7fb081bc36b9436b43a4572a4a
|
@ -0,0 +1 @@
|
||||
66ca70f41018f3c48777f7f52bfef6ebd6bfd795
|
@ -22,6 +22,9 @@ const char HotspotNotifier::kAdminRestrictedNotificationId[] =
|
||||
const char HotspotNotifier::kWiFiTurnedOnNotificationId[] =
|
||||
"cros_hotspot_notifier_ids.wifi_turned_on";
|
||||
|
||||
const char HotspotNotifier::kAutoDisabledNotificationId[] =
|
||||
"cros_hotspot_notifier_ids.auto_disabled";
|
||||
|
||||
const char kNotifierHotspot[] = "ash.hotspot";
|
||||
|
||||
HotspotNotifier::HotspotNotifier() {
|
||||
@ -55,6 +58,7 @@ void HotspotNotifier::OnHotspotTurnedOff(
|
||||
int title_id;
|
||||
int message_id;
|
||||
const char* notification_id;
|
||||
std::vector<message_center::ButtonInfo> notification_actions;
|
||||
switch (disable_reason) {
|
||||
case hotspot_config::mojom::DisableReason::kProhibitedByPolicy:
|
||||
title_id = IDS_ASH_HOTSPOT_OFF_TITLE;
|
||||
@ -66,12 +70,29 @@ void HotspotNotifier::OnHotspotTurnedOff(
|
||||
message_id = IDS_ASH_HOTSPOT_WIFI_TURNED_ON_MESSAGE;
|
||||
notification_id = kWiFiTurnedOnNotificationId;
|
||||
break;
|
||||
case hotspot_config::mojom::DisableReason::kAutoDisabled:
|
||||
title_id = IDS_ASH_HOTSPOT_OFF_TITLE;
|
||||
message_id = IDS_ASH_HOTSPOT_AUTO_DISABLED_MESSAGE;
|
||||
notification_id = kAutoDisabledNotificationId;
|
||||
delegate =
|
||||
base::MakeRefCounted<message_center::HandleNotificationClickDelegate>(
|
||||
base::BindRepeating(&HotspotNotifier::EnableHotspotHandler,
|
||||
weak_ptr_factory_.GetWeakPtr(),
|
||||
notification_id));
|
||||
notification_actions.push_back(
|
||||
message_center::ButtonInfo(l10n_util::GetStringUTF16(
|
||||
IDS_ASH_HOTSPOT_NOTIFICATION_TURN_ON_BUTTON)));
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
std::unique_ptr<message_center::Notification> notification =
|
||||
CreateNotification(title_id, message_id, notification_id, delegate);
|
||||
|
||||
if (notification_actions.size() > 0) {
|
||||
notification->set_buttons(notification_actions);
|
||||
}
|
||||
|
||||
message_center::MessageCenter* message_center =
|
||||
message_center::MessageCenter::Get();
|
||||
message_center->RemoveNotification(notification_id,
|
||||
@ -79,6 +100,27 @@ void HotspotNotifier::OnHotspotTurnedOff(
|
||||
message_center->AddNotification(std::move(notification));
|
||||
}
|
||||
|
||||
void HotspotNotifier::EnableHotspotHandler(const char* notification_id,
|
||||
absl::optional<int> button_index) {
|
||||
if (!button_index) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (button_index.value() == 0) {
|
||||
remote_cros_hotspot_config_->EnableHotspot(
|
||||
base::BindOnce([](hotspot_config::mojom::HotspotControlResult result) {
|
||||
if (result == hotspot_config::mojom::HotspotControlResult::kSuccess ||
|
||||
result == hotspot_config::mojom::HotspotControlResult::
|
||||
kAlreadyFulfilled) {
|
||||
message_center::MessageCenter* message_center =
|
||||
message_center::MessageCenter::Get();
|
||||
message_center->RemoveNotification(kAutoDisabledNotificationId,
|
||||
/*by_user=*/false);
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<message_center::Notification>
|
||||
HotspotNotifier::CreateNotification(
|
||||
const int title_id,
|
||||
|
@ -34,6 +34,7 @@ class ASH_EXPORT HotspotNotifier
|
||||
static const char kWiFiTurnedOffNotificationId[];
|
||||
static const char kAdminRestrictedNotificationId[];
|
||||
static const char kWiFiTurnedOnNotificationId[];
|
||||
static const char kAutoDisabledNotificationId[];
|
||||
|
||||
private:
|
||||
friend class HotspotNotifierTest;
|
||||
@ -49,6 +50,9 @@ class ASH_EXPORT HotspotNotifier
|
||||
const char* notification_id,
|
||||
scoped_refptr<message_center::NotificationDelegate> delegate);
|
||||
|
||||
void EnableHotspotHandler(const char* notification_id,
|
||||
absl::optional<int> index);
|
||||
|
||||
mojo::Remote<hotspot_config::mojom::CrosHotspotConfig>
|
||||
remote_cros_hotspot_config_;
|
||||
mojo::Receiver<hotspot_config::mojom::HotspotEnabledStateObserver>
|
||||
|
@ -168,4 +168,29 @@ TEST_F(HotspotNotifierTest, WiFiTurnedOn) {
|
||||
HotspotNotifier::kWiFiTurnedOnNotificationId));
|
||||
}
|
||||
|
||||
TEST_F(HotspotNotifierTest, AutoDisabled) {
|
||||
SetValidHotspotCapabilities();
|
||||
SetReadinessCheckResultReady();
|
||||
AddActiveCellularService();
|
||||
helper()->manager_test()->SetSimulateTetheringEnableResult(
|
||||
FakeShillSimulatedResult::kSuccess, shill::kTetheringEnableResultSuccess);
|
||||
base::RunLoop().RunUntilIdle();
|
||||
|
||||
EnableHotspot();
|
||||
EXPECT_TRUE(message_center::MessageCenter::Get()->FindVisibleNotificationById(
|
||||
HotspotNotifier::kWiFiTurnedOffNotificationId));
|
||||
|
||||
NotifyHotspotTurnedOff(hotspot_config::mojom::DisableReason::kAutoDisabled);
|
||||
base::RunLoop().RunUntilIdle();
|
||||
EXPECT_TRUE(message_center::MessageCenter::Get()->FindVisibleNotificationById(
|
||||
HotspotNotifier::kAutoDisabledNotificationId));
|
||||
|
||||
message_center::MessageCenter::Get()->ClickOnNotificationButton(
|
||||
HotspotNotifier::kAutoDisabledNotificationId, 0);
|
||||
base::RunLoop().RunUntilIdle();
|
||||
EXPECT_FALSE(
|
||||
message_center::MessageCenter::Get()->FindVisibleNotificationById(
|
||||
HotspotNotifier::kAutoDisabledNotificationId));
|
||||
}
|
||||
|
||||
} // namespace ash
|
||||
|
Reference in New Issue
Block a user