| // Copyright 2020 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_PHONEHUB_SILENCE_PHONE_QUICK_ACTION_CONTROLLER_H_ |
| #define ASH_SYSTEM_PHONEHUB_SILENCE_PHONE_QUICK_ACTION_CONTROLLER_H_ |
| |
| #include "ash/system/phonehub/quick_action_controller_base.h" |
| #include "base/memory/raw_ptr.h" |
| #include "chromeos/ash/components/phonehub/do_not_disturb_controller.h" |
| |
| namespace base { |
| class OneShotTimer; |
| } // namespace base |
| |
| namespace ash { |
| |
| // Controller of a quick action item that toggles silence phone mode. |
| class ASH_EXPORT SilencePhoneQuickActionController |
| : public QuickActionControllerBase, |
| public phonehub::DoNotDisturbController::Observer { |
| public: |
| explicit SilencePhoneQuickActionController( |
| phonehub::DoNotDisturbController* dnd_controller); |
| ~SilencePhoneQuickActionController() override; |
| SilencePhoneQuickActionController(SilencePhoneQuickActionController&) = |
| delete; |
| SilencePhoneQuickActionController operator=( |
| SilencePhoneQuickActionController&) = delete; |
| |
| // Return true if the item is enabled/toggled. |
| bool IsItemEnabled(); |
| |
| // QuickActionControllerBase: |
| QuickActionItem* CreateItem() override; |
| void OnButtonPressed(bool is_now_enabled) override; |
| void UpdateQuickActionItemUi() override; |
| |
| // phonehub::DoNotDisturbController::Observer: |
| void OnDndStateChanged() override; |
| |
| private: |
| friend class SilencePhoneQuickActionControllerTest; |
| |
| // All the possible states that the silence phone button can be viewed. Each |
| // state has a corresponding icon, labels and tooltip view. |
| enum class ActionState { kOff, kOn, kDisabled }; |
| |
| // Set the item (including icon, label and tooltips) to a certain state. |
| void SetItemState(ActionState state); |
| |
| // Retrieves the current state of the QuickActionItem. Used only for testing. |
| ActionState GetItemState(); |
| |
| // Check to see if the requested state is similar to current state of the |
| // phone. Make changes to item's state if necessary. |
| void CheckRequestedState(); |
| |
| raw_ptr<phonehub::DoNotDisturbController> dnd_controller_ = nullptr; |
| raw_ptr<QuickActionItem, DanglingUntriaged> item_ = nullptr; |
| |
| // Keep track the current state of the item. |
| ActionState state_; |
| |
| // State that user requests when clicking the button. |
| std::optional<ActionState> requested_state_; |
| |
| // Timer that fires to prevent showing wrong state in the item. It will check |
| // if the requested state is similar to the current state after the button is |
| // pressed for a certain time. |
| std::unique_ptr<base::OneShotTimer> check_requested_state_timer_; |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_SYSTEM_PHONEHUB_SILENCE_PHONE_QUICK_ACTION_CONTROLLER_H_ |