| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_SIGNIN_EASY_UNLOCK_SCREENLOCK_STATE_HANDLER_H_ |
| #define CHROME_BROWSER_SIGNIN_EASY_UNLOCK_SCREENLOCK_STATE_HANDLER_H_ |
| |
| #include <string> |
| |
| #include "base/strings/string16.h" |
| #include "base/timer/timer.h" |
| #include "chrome/browser/signin/screenlock_bridge.h" |
| |
| class PrefService; |
| |
| // Profile specific class responsible for updating screenlock UI for the user |
| // associated with the profile when their Easy Unlock state changes. |
| class EasyUnlockScreenlockStateHandler : public ScreenlockBridge::Observer { |
| public: |
| // Available Easy Unlock states. |
| enum State { |
| // Easy Unlock is not enabled, or the screen is not locked. |
| STATE_INACTIVE, |
| // Bluetooth is not on. |
| STATE_NO_BLUETOOTH, |
| // Easy Unlock is in process of turning on Bluetooth. |
| STATE_BLUETOOTH_CONNECTING, |
| // No phones eligible to unlock the device can be found. |
| STATE_NO_PHONE, |
| // A phone eligible to unlock the device is found, but cannot be |
| // authenticated. |
| STATE_PHONE_NOT_AUTHENTICATED, |
| // A phone eligible to unlock the device is found, but it's locked. |
| STATE_PHONE_LOCKED, |
| // A phone eligible to unlock the device is found, but does not have lock |
| // screen enabled. |
| STATE_PHONE_UNLOCKABLE, |
| // A phone eligible to unlock the device is found, but it's not close enough |
| // to be allowed to unlock the device. |
| STATE_PHONE_NOT_NEARBY, |
| // An Easy Unlock enabled phone is found, but it is not allowed to unlock |
| // the device because it does not support reporting it's lock screen state. |
| STATE_PHONE_UNSUPPORTED, |
| // The device can be unlocked using Easy Unlock. |
| STATE_AUTHENTICATED |
| }; |
| |
| // |user_email|: The email for the user associated with the profile to which |
| // this class is attached. |
| // |pref_service|: The profile preferences. |
| // |screenlock_bridge|: The screenlock bridge used to update the screen lock |
| // state. |
| EasyUnlockScreenlockStateHandler(const std::string& user_email, |
| PrefService* pref_service, |
| ScreenlockBridge* screenlock_bridge); |
| virtual ~EasyUnlockScreenlockStateHandler(); |
| |
| // Changes internal state to |new_state| and updates the user's screenlock |
| // accordingly. |
| void ChangeState(State new_state); |
| |
| private: |
| // ScreenlockBridge::Observer: |
| virtual void OnScreenDidLock() OVERRIDE; |
| virtual void OnScreenDidUnlock() OVERRIDE; |
| |
| // Updates icon's tooltip options. |
| // |trial_run|: Whether the trial Easy Unlock run is in progress. |
| void UpdateTooltipOptions( |
| bool trial_run, |
| ScreenlockBridge::UserPodCustomIconOptions* icon_options); |
| |
| // Whether this is the first, trial Easy Unlock run. If this is the case, a |
| // tutorial message should be shown and hard-locking be disabled in |
| // Authenticated state. The trial run will be active if Easy Unlock never |
| // entered Authenticated state (across sessions). |
| bool IsTrialRun(); |
| |
| // Sets user preference that marks trial run completed. |
| void MarkTrialRunComplete(); |
| |
| // Gets the name to be used for the device. The name depends on the device |
| // type (example values: Chromebook and Chromebox). |
| base::string16 GetDeviceName(); |
| |
| // Updates the screenlock auth type if it has to be changed. |
| void UpdateScreenlockAuthType(); |
| |
| State state_; |
| std::string user_email_; |
| PrefService* pref_service_; |
| ScreenlockBridge* screenlock_bridge_; |
| |
| DISALLOW_COPY_AND_ASSIGN(EasyUnlockScreenlockStateHandler); |
| }; |
| |
| #endif // CHROME_BROWSER_SIGNIN_EASY_UNLOCK_SCREENLOCK_STATE_HANDLER_H_ |