blob: 452687b7e4e1d273ca013759354fc384c41f2c29 [file] [log] [blame]
// 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_