1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_SYSTEM_INPUT_DEVICE_SETTINGS_INPUT_DEVICE_SETTINGS_NOTIFICATION_CONTROLLER_H_
#define ASH_SYSTEM_INPUT_DEVICE_SETTINGS_INPUT_DEVICE_SETTINGS_NOTIFICATION_CONTROLLER_H_
#include "ash/ash_export.h"
#include "ash/public/mojom/input_device_settings.mojom.h"
#include "base/containers/flat_map.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "ui/events/ash/mojom/simulate_right_click_modifier.mojom-shared.h"
#include "ui/events/ash/mojom/six_pack_shortcut_modifier.mojom-shared.h"
#include "ui/events/keycodes/keyboard_codes_posix.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/image/image_skia.h"
class PrefRegistrySimple;
namespace message_center {
class MessageCenter;
} // namespace message_center
namespace ash {
// The notification button index.
enum NotificationButtonIndex {
BUTTON_EDIT_SHORTCUT = 0,
BUTTON_LEARN_MORE,
};
// Manages showing notifications for Six Pack/right-click event rewrites.
// Notifications are shown when the user's setting is inconsistent with
// the matched modifier key or the setting is disabled.
class ASH_EXPORT InputDeviceSettingsNotificationController {
public:
explicit InputDeviceSettingsNotificationController(
message_center::MessageCenter* message_center);
InputDeviceSettingsNotificationController(
const InputDeviceSettingsNotificationController&) = delete;
InputDeviceSettingsNotificationController& operator=(
const InputDeviceSettingsNotificationController&) = delete;
virtual ~InputDeviceSettingsNotificationController();
static void RegisterProfilePrefs(PrefRegistrySimple* pref_registry);
// Used to display a notification when an incoming event would have been
// remapped to a right click but either the user's setting is inconsistent
// with the matched modifier key or remapping to right click is disabled.
void NotifyRightClickRewriteBlockedBySetting(
ui::mojom::SimulateRightClickModifier blocked_modifier,
ui::mojom::SimulateRightClickModifier active_modifier);
// Used to display a notification when an incoming event would have been
// remapped to a Six Pack key action but either the user's setting is
// inconsistent with the matched modifier key or remapping to right click
// is disabled. `key_code` is used to lookup the correct Six Pack key and
// the `device_id` is provided to route the user to the correct remap keys
// subpage when the notification is clicked on.
void NotifySixPackRewriteBlockedBySetting(
ui::KeyboardCode key_code,
ui::mojom::SixPackShortcutModifier blocked_modifier,
ui::mojom::SixPackShortcutModifier active_modifier,
int device_id);
// Used to display a notification when a customizable mouse is connected to
// the chromebook for the first time.
void NotifyMouseIsCustomizable(const mojom::Mouse& mouse,
const gfx::ImageSkia& device_image);
// Used to display a notification when a customizable graphics tablet is
// connected to the chromebook for the first time.
void NotifyGraphicsTabletIsCustomizable(
const mojom::GraphicsTablet& graphics_tablet,
const gfx::ImageSkia& device_image);
// Used to display a notification when a customizable keyboard is connected
// to the chromebook for the first time.
void ShowKeyboardSettingsNotification(const mojom::Keyboard& keyboard,
const gfx::ImageSkia& device_image);
// Used to display a notification when a customizable touchpad is connected
// to the chromebook for the first time.
void ShowTouchpadSettingsNotification(const mojom::Touchpad& touchpad,
const gfx::ImageSkia& device_image);
// Use to display a notification when a mouse is first connected.
void NotifyMouseFirstTimeConnected(const mojom::Mouse& mouse,
const gfx::ImageSkia& device_image = {});
// Used to display a notification when a customizable pointing stick is
// connected to the chromebook for the first time.
void ShowPointingStickSettingsNotification(
const mojom::PointingStick& pointing_stick);
// Use to display a notification when a graphics table is first connected.
void NotifyGraphicsTabletFirstTimeConnected(
const mojom::GraphicsTablet& graphics_tablet,
const gfx::ImageSkia& device_image = {});
// Use to display a notification when a keyboard is first connected.
void NotifyKeyboardFirstTimeConnected(const mojom::Keyboard& keyboard,
const gfx::ImageSkia& device_image);
// Use to display a notification when a touchpad is first connected.
void NotifyTouchpadFirstTimeConnected(const mojom::Touchpad& touchpad,
const gfx::ImageSkia& device_image);
// Use to display a notification when a pointing stick is first connected.
void NotifyPointingStickFirstTimeConnected(
const mojom::PointingStick& pointing_stick);
// Use to display a notification to remind users to press Fn key when users
// press search key with top row keys and there is no matching behavior.
void ShowTopRowRewritingNudge();
// Use to display a notification to remind users to press Fn key when users
// press search key or alt key with arrow keys and there is no matching
// behavior.
void ShowSixPackKeyRewritingNudge(
ui::KeyboardCode key_code,
ui::mojom::SixPackShortcutModifier blocked_modifier);
// Use to display a notification to remind users to press Fn key when users
// press search key or quick insert key with alt key to switch caps lock
// and there is no matching.
void ShowCapsLockRewritingNudge();
std::optional<std::string> GetDeviceKeyForNotificationId(
const std::string& notification_id);
private:
void HandleRightClickNotificationClicked(const std::string& notification_id,
std::optional<int> button_index);
void HandleSixPackNotificationClicked(int device_id,
const char* pref_name,
const std::string& notification_id,
std::optional<int> button_index);
base::flat_map<std::string, std::string> notification_id_to_device_key_map_;
// MessageCenter for adding notifications.
const raw_ptr<message_center::MessageCenter, DanglingUntriaged>
message_center_;
base::WeakPtrFactory<InputDeviceSettingsNotificationController>
weak_ptr_factory_{this};
};
} // namespace ash
#endif // ASH_SYSTEM_INPUT_DEVICE_SETTINGS_INPUT_DEVICE_SETTINGS_NOTIFICATION_CONTROLLER_H_
|