Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Side by Side Diff: chrome/browser/signin/easy_unlock_screenlock_state_handler.cc

Issue 456943003: Easy Unlock: Add support for hard locking (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/signin/easy_unlock_screenlock_state_handler.h" 5 #include "chrome/browser/signin/easy_unlock_screenlock_state_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/prefs/pref_service.h" 8 #include "base/prefs/pref_service.h"
9 #include "base/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 return state == EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH || 42 return state == EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH ||
43 state == EasyUnlockScreenlockStateHandler::STATE_NO_PHONE || 43 state == EasyUnlockScreenlockStateHandler::STATE_NO_PHONE ||
44 state == EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_NEARBY || 44 state == EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_NEARBY ||
45 state == EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE; 45 state == EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE;
46 } 46 }
47 47
48 bool HasAnimation(EasyUnlockScreenlockStateHandler::State state) { 48 bool HasAnimation(EasyUnlockScreenlockStateHandler::State state) {
49 return state == EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING; 49 return state == EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING;
50 } 50 }
51 51
52 bool HardlockOnClick(EasyUnlockScreenlockStateHandler::State state) {
53 return state == EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED;
54 }
55
52 size_t GetTooltipResourceId(EasyUnlockScreenlockStateHandler::State state) { 56 size_t GetTooltipResourceId(EasyUnlockScreenlockStateHandler::State state) {
53 switch (state) { 57 switch (state) {
54 case EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH: 58 case EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH:
55 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_NO_BLUETOOTH; 59 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_NO_BLUETOOTH;
56 case EasyUnlockScreenlockStateHandler::STATE_NO_PHONE: 60 case EasyUnlockScreenlockStateHandler::STATE_NO_PHONE:
57 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_NO_PHONE; 61 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_NO_PHONE;
58 case EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED: 62 case EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED:
59 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_NOT_AUTHENTICATED; 63 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_NOT_AUTHENTICATED;
60 case EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED: 64 case EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED:
61 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_LOCKED; 65 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_LOCKED;
62 case EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE: 66 case EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE:
63 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_UNLOCKABLE; 67 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_UNLOCKABLE;
64 case EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_NEARBY: 68 case EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_NEARBY:
65 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_NOT_NEARBY; 69 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_NOT_NEARBY;
66 case EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED: 70 case EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED:
67 // TODO(tbarzic): When hard lock is enabled change this to 71 return IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_HARDLOCK_INSTRUCTIONS;
68 // IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_HARDLOCK_INSTRUCTIONS.
69 return 0;
70 default: 72 default:
71 return 0; 73 return 0;
72 } 74 }
73 } 75 }
74 76
75 } // namespace 77 } // namespace
76 78
77 79
78 EasyUnlockScreenlockStateHandler::EasyUnlockScreenlockStateHandler( 80 EasyUnlockScreenlockStateHandler::EasyUnlockScreenlockStateHandler(
79 const std::string& user_email, 81 const std::string& user_email,
(...skipping 12 matching lines...) Expand all
92 // Make sure the screenlock state set by this gets cleared. 94 // Make sure the screenlock state set by this gets cleared.
93 ChangeState(STATE_INACTIVE); 95 ChangeState(STATE_INACTIVE);
94 } 96 }
95 97
96 void EasyUnlockScreenlockStateHandler::ChangeState(State new_state) { 98 void EasyUnlockScreenlockStateHandler::ChangeState(State new_state) {
97 if (state_ == new_state) 99 if (state_ == new_state)
98 return; 100 return;
99 101
100 state_ = new_state; 102 state_ = new_state;
101 103
102 // If lock screen is not active, just cache the current state. 104 // If lock screen is not active or it forces offline password, just cache the
103 // The screenlock state will get refreshed in |ScreenDidLock|. 105 // current state. The screenlock state will get refreshed in |ScreenDidLock|.
104 if (!screenlock_bridge_->IsLocked()) 106 if (!screenlock_bridge_->IsLocked() ||
107 screenlock_bridge_->lock_handler()->GetAuthType(user_email_) ==
108 ScreenlockBridge::LockHandler::FORCE_OFFLINE_PASSWORD) {
105 return; 109 return;
110 }
106 111
107 UpdateScreenlockAuthType(); 112 UpdateScreenlockAuthType();
108 113
109 ScreenlockBridge::UserPodCustomIconOptions icon_options; 114 ScreenlockBridge::UserPodCustomIconOptions icon_options;
110 115
111 std::string icon_url = GetIconURLForState(state_); 116 std::string icon_url = GetIconURLForState(state_);
112 if (icon_url.empty()) { 117 if (icon_url.empty()) {
113 screenlock_bridge_->lock_handler()->HideUserPodCustomIcon(user_email_); 118 screenlock_bridge_->lock_handler()->HideUserPodCustomIcon(user_email_);
114 return; 119 return;
115 } 120 }
116 icon_options.SetIconAsResourceURL(icon_url); 121 icon_options.SetIconAsResourceURL(icon_url);
117 122
118 UpdateTooltipOptions(&icon_options); 123 bool trial_run = IsTrialRun();
124
125 UpdateTooltipOptions(trial_run, &icon_options);
119 126
120 if (UseOpaqueIcon(state_)) 127 if (UseOpaqueIcon(state_))
121 icon_options.SetOpacity(kOpaqueIconOpacity); 128 icon_options.SetOpacity(kOpaqueIconOpacity);
122 129
123 icon_options.SetSize(kIconSize, kIconSize); 130 icon_options.SetSize(kIconSize, kIconSize);
124 131
125 if (HasAnimation(state_)) 132 if (HasAnimation(state_))
126 icon_options.SetAnimation(kSpinnerResourceWidth, kSpinnerIntervalMs); 133 icon_options.SetAnimation(kSpinnerResourceWidth, kSpinnerIntervalMs);
127 134
135 // Hardlocking is disabled in trial run.
136 if (!trial_run && HardlockOnClick(state_))
137 icon_options.SetHardlockOnClick();
138
139 if (trial_run && state_ == STATE_AUTHENTICATED)
140 MarkTrialRunComplete();
141
128 screenlock_bridge_->lock_handler()->ShowUserPodCustomIcon(user_email_, 142 screenlock_bridge_->lock_handler()->ShowUserPodCustomIcon(user_email_,
129 icon_options); 143 icon_options);
130 } 144 }
131 145
132 void EasyUnlockScreenlockStateHandler::OnScreenDidLock() { 146 void EasyUnlockScreenlockStateHandler::OnScreenDidLock() {
133 State last_state = state_; 147 State last_state = state_;
134 // This should force updating screenlock state. 148 // This should force updating screenlock state.
135 state_ = STATE_INACTIVE; 149 state_ = STATE_INACTIVE;
136 ChangeState(last_state); 150 ChangeState(last_state);
137 } 151 }
138 152
139 void EasyUnlockScreenlockStateHandler::OnScreenDidUnlock() { 153 void EasyUnlockScreenlockStateHandler::OnScreenDidUnlock() {
140 } 154 }
141 155
142 void EasyUnlockScreenlockStateHandler::UpdateTooltipOptions( 156 void EasyUnlockScreenlockStateHandler::UpdateTooltipOptions(
157 bool trial_run,
143 ScreenlockBridge::UserPodCustomIconOptions* icon_options) { 158 ScreenlockBridge::UserPodCustomIconOptions* icon_options) {
144 bool show_tutorial = ShouldShowTutorial();
145
146 size_t resource_id = 0; 159 size_t resource_id = 0;
147 base::string16 device_name; 160 base::string16 device_name;
148 if (show_tutorial) { 161 if (trial_run && state_ == STATE_AUTHENTICATED) {
149 resource_id = IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_TUTORIAL; 162 resource_id = IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_TUTORIAL;
150 } else { 163 } else {
151 resource_id = GetTooltipResourceId(state_); 164 resource_id = GetTooltipResourceId(state_);
152 if (state_ == STATE_AUTHENTICATED || state_ == STATE_PHONE_UNLOCKABLE) 165 if (state_ == STATE_AUTHENTICATED || state_ == STATE_PHONE_UNLOCKABLE)
153 device_name = GetDeviceName(); 166 device_name = GetDeviceName();
154 } 167 }
155 168
156 if (!resource_id) 169 if (!resource_id)
157 return; 170 return;
158 171
159 base::string16 tooltip; 172 base::string16 tooltip;
160 if (device_name.empty()) { 173 if (device_name.empty()) {
161 tooltip = l10n_util::GetStringUTF16(resource_id); 174 tooltip = l10n_util::GetStringUTF16(resource_id);
162 } else { 175 } else {
163 tooltip = l10n_util::GetStringFUTF16(resource_id, device_name); 176 tooltip = l10n_util::GetStringFUTF16(resource_id, device_name);
164 } 177 }
165 178
166 if (tooltip.empty()) 179 if (tooltip.empty())
167 return; 180 return;
168 181
169 if (show_tutorial) 182 icon_options->SetTooltip(
170 MarkTutorialShown(); 183 tooltip,
171 184 state_ == STATE_AUTHENTICATED && trial_run /* autoshow tooltip */);
172 icon_options->SetTooltip(tooltip, show_tutorial /* autoshow tooltip */);
173 } 185 }
174 186
175 bool EasyUnlockScreenlockStateHandler::ShouldShowTutorial() { 187 bool EasyUnlockScreenlockStateHandler::IsTrialRun() {
176 if (state_ != STATE_AUTHENTICATED)
177 return false;
178 return pref_service_ && 188 return pref_service_ &&
179 pref_service_->GetBoolean(prefs::kEasyUnlockShowTutorial); 189 pref_service_->GetBoolean(prefs::kEasyUnlockShowTutorial);
180 } 190 }
181 191
182 void EasyUnlockScreenlockStateHandler::MarkTutorialShown() { 192 void EasyUnlockScreenlockStateHandler::MarkTrialRunComplete() {
183 if (!pref_service_) 193 if (!pref_service_)
184 return; 194 return;
185 pref_service_->SetBoolean(prefs::kEasyUnlockShowTutorial, false); 195 pref_service_->SetBoolean(prefs::kEasyUnlockShowTutorial, false);
186 } 196 }
187 197
188 base::string16 EasyUnlockScreenlockStateHandler::GetDeviceName() { 198 base::string16 EasyUnlockScreenlockStateHandler::GetDeviceName() {
189 #if defined(OS_CHROMEOS) 199 #if defined(OS_CHROMEOS)
190 return chromeos::GetChromeDeviceType(); 200 return chromeos::GetChromeDeviceType();
191 #else 201 #else
192 // TODO(tbarzic): Figure out the name for non Chrome OS case. 202 // TODO(tbarzic): Figure out the name for non Chrome OS case.
193 return base::ASCIIToUTF16("Chrome"); 203 return base::ASCIIToUTF16("Chrome");
194 #endif 204 #endif
195 } 205 }
196 206
197 void EasyUnlockScreenlockStateHandler::UpdateScreenlockAuthType() { 207 void EasyUnlockScreenlockStateHandler::UpdateScreenlockAuthType() {
208 if (screenlock_bridge_->lock_handler()->GetAuthType(user_email_) ==
209 ScreenlockBridge::LockHandler::FORCE_OFFLINE_PASSWORD)
210 return;
211
198 if (state_ == STATE_AUTHENTICATED) { 212 if (state_ == STATE_AUTHENTICATED) {
199 screenlock_bridge_->lock_handler()->SetAuthType( 213 screenlock_bridge_->lock_handler()->SetAuthType(
200 user_email_, 214 user_email_,
201 ScreenlockBridge::LockHandler::USER_CLICK, 215 ScreenlockBridge::LockHandler::USER_CLICK,
202 l10n_util::GetStringUTF16( 216 l10n_util::GetStringUTF16(
203 IDS_EASY_UNLOCK_SCREENLOCK_USER_POD_AUTH_VALUE)); 217 IDS_EASY_UNLOCK_SCREENLOCK_USER_POD_AUTH_VALUE));
204 } else if (screenlock_bridge_->lock_handler()->GetAuthType(user_email_) != 218 } else if (screenlock_bridge_->lock_handler()->GetAuthType(user_email_) !=
205 ScreenlockBridge::LockHandler::OFFLINE_PASSWORD) { 219 ScreenlockBridge::LockHandler::OFFLINE_PASSWORD) {
206 screenlock_bridge_->lock_handler()->SetAuthType( 220 screenlock_bridge_->lock_handler()->SetAuthType(
207 user_email_, 221 user_email_,
208 ScreenlockBridge::LockHandler::OFFLINE_PASSWORD, 222 ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
209 base::string16()); 223 base::string16());
210 } 224 }
211 } 225 }
OLDNEW
« no previous file with comments | « chrome/browser/signin/easy_unlock_screenlock_state_handler.h ('k') | chrome/browser/signin/screenlock_bridge.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698