OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/chromeos/accessibility/magnification_manager.h" | 5 #include "chrome/browser/chromeos/accessibility/magnification_manager.h" |
6 | 6 |
7 #include "ash/magnifier/magnification_controller.h" | 7 #include "ash/magnifier/magnification_controller.h" |
8 #include "ash/magnifier/partial_magnification_controller.h" | 8 #include "ash/magnifier/partial_magnification_controller.h" |
9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
10 #include "ash/system/tray/system_tray_notifier.h" | 10 #include "ash/system/tray/system_tray_notifier.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 | 57 |
58 void SetMagnifier(ash::MagnifierType type) OVERRIDE { | 58 void SetMagnifier(ash::MagnifierType type) OVERRIDE { |
59 if (type == type_ && type == ash::MAGNIFIER_OFF) | 59 if (type == type_ && type == ash::MAGNIFIER_OFF) |
60 return; | 60 return; |
61 | 61 |
62 type_ = type; | 62 type_ = type; |
63 | 63 |
64 if (profile_) { | 64 if (profile_) { |
65 PrefService* prefs = profile_->GetPrefs(); | 65 PrefService* prefs = profile_->GetPrefs(); |
66 if (prefs) { | 66 if (prefs) { |
67 std::string typeString = | 67 bool enabled = (type != ash::MAGNIFIER_OFF); |
68 accessibility::ScreenMagnifierNameFromType(type); | 68 if (enabled != prefs->GetBoolean(prefs::kScreenMagnifierEnabled)) { |
69 if (typeString != prefs->GetString(prefs::kMagnifierType)) { | 69 prefs->SetBoolean(prefs::kScreenMagnifierEnabled, enabled); |
70 prefs->SetString(prefs::kMagnifierType, typeString); | |
71 prefs->CommitPendingWrite(); | 70 prefs->CommitPendingWrite(); |
72 } | 71 } |
73 } | 72 } |
74 } | 73 } |
75 | 74 |
76 content::NotificationService::current()->Notify( | 75 content::NotificationService::current()->Notify( |
77 chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER, | 76 chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER, |
78 content::NotificationService::AllSources(), | 77 content::NotificationService::AllSources(), |
79 content::NotificationService::NoDetails()); | 78 content::NotificationService::NoDetails()); |
80 | 79 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 } | 112 } |
114 | 113 |
115 ash::MagnifierType GetMagnifierTypeFromPref() { | 114 ash::MagnifierType GetMagnifierTypeFromPref() { |
116 if (!profile_) | 115 if (!profile_) |
117 return ash::MAGNIFIER_OFF; | 116 return ash::MAGNIFIER_OFF; |
118 | 117 |
119 PrefService* prefs = profile_->GetPrefs(); | 118 PrefService* prefs = profile_->GetPrefs(); |
120 if (!prefs) | 119 if (!prefs) |
121 return ash::MAGNIFIER_OFF; | 120 return ash::MAGNIFIER_OFF; |
122 | 121 |
123 return accessibility::MagnifierTypeFromName( | 122 return prefs->GetBoolean(prefs::kScreenMagnifierEnabled) ? |
124 prefs->GetString(prefs::kMagnifierType).c_str()); | 123 ash::MAGNIFIER_FULL : ash::MAGNIFIER_OFF; |
125 } | 124 } |
126 | 125 |
127 void SetProfile(Profile* profile) { | 126 void SetProfile(Profile* profile) { |
128 if (pref_change_registrar_) { | 127 if (pref_change_registrar_) { |
129 pref_change_registrar_.reset(); | 128 pref_change_registrar_.reset(); |
130 } | 129 } |
131 | 130 |
132 if (profile) { | 131 if (profile) { |
133 pref_change_registrar_.reset(new PrefChangeRegistrar); | 132 pref_change_registrar_.reset(new PrefChangeRegistrar); |
134 pref_change_registrar_->Init(profile->GetPrefs()); | 133 pref_change_registrar_->Init(profile->GetPrefs()); |
135 pref_change_registrar_->Add( | 134 pref_change_registrar_->Add( |
136 prefs::kMagnifierType, | 135 prefs::kScreenMagnifierEnabled, |
137 base::Bind(&MagnificationManagerImpl::UpdateMagnifierStatus, | 136 base::Bind(&MagnificationManagerImpl::UpdateMagnifierStatus, |
138 base::Unretained(this))); | 137 base::Unretained(this))); |
139 } | 138 } |
140 | 139 |
141 profile_ = profile; | 140 profile_ = profile; |
142 UpdateMagnifierStatus(); | 141 UpdateMagnifierStatus(); |
143 } | 142 } |
144 | 143 |
145 void UpdateMagnifierStatus() { | 144 void UpdateMagnifierStatus() { |
146 // Historycally, from r162080 to r170956, screen magnifier had been enabled | |
147 // with 1.0x scale on login screen by default, hence some users | |
148 // unintentionally have the pref to enable magnifier. Now, the default scale | |
149 // is 2.0x on login screen (same as other screens), so despite them, with | |
150 // the old pref, their screen might be magnified with 2.0x scale. | |
151 // The following code prevents it. If the user on login screen has full | |
152 // screen magnifier pref but no scale pref, doesn't make magnifier enabled. | |
153 // TODO(yoshiki): remove this in the near future: crbug.com/164627 | |
154 if (first_time_update_) { | |
155 first_time_update_ = false; | |
156 UserManager* manager = UserManager::Get(); | |
157 if (profile_ && | |
158 !profile_->GetPrefs()->HasPrefPath(prefs::kScreenMagnifierScale) && | |
159 accessibility::MagnifierTypeFromName(profile_->GetPrefs()->GetString( | |
160 prefs::kMagnifierType).c_str()) == ash::MAGNIFIER_FULL && | |
161 manager && | |
162 !manager->IsSessionStarted()) { | |
163 SetMagnifier(ash::MAGNIFIER_OFF); | |
164 profile_->GetPrefs()->SetDouble(prefs::kScreenMagnifierScale, | |
165 kInitialMagnifiedScale); | |
166 return; | |
167 } | |
168 } | |
169 | |
170 ash::MagnifierType type = GetMagnifierTypeFromPref(); | 145 ash::MagnifierType type = GetMagnifierTypeFromPref(); |
171 SetMagnifier(type); | 146 SetMagnifier(type); |
172 } | 147 } |
173 | 148 |
174 // content::NotificationObserver implimentation: | 149 // content::NotificationObserver implimentation: |
175 virtual void Observe(int type, | 150 virtual void Observe(int type, |
176 const content::NotificationSource& source, | 151 const content::NotificationSource& source, |
177 const content::NotificationDetails& details) OVERRIDE { | 152 const content::NotificationDetails& details) OVERRIDE { |
178 switch (type) { | 153 switch (type) { |
179 case chrome::NOTIFICATION_LOGIN_WEBUI_VISIBLE: | 154 case chrome::NOTIFICATION_LOGIN_WEBUI_VISIBLE: |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 delete g_magnification_manager; | 186 delete g_magnification_manager; |
212 g_magnification_manager = NULL; | 187 g_magnification_manager = NULL; |
213 } | 188 } |
214 | 189 |
215 // static | 190 // static |
216 MagnificationManager* MagnificationManager::Get() { | 191 MagnificationManager* MagnificationManager::Get() { |
217 return g_magnification_manager; | 192 return g_magnification_manager; |
218 } | 193 } |
219 | 194 |
220 } // namespace chromeos | 195 } // namespace chromeos |
OLD | NEW |