Index: chrome/browser/chromeos/accessibility/magnification_manager.cc |
diff --git a/chrome/browser/chromeos/accessibility/magnification_manager.cc b/chrome/browser/chromeos/accessibility/magnification_manager.cc |
index c4a7f686513bc1b2609b7514ad726af560f4b2d1..727526e0912f446396b880e3b971d3f4d6499405 100644 |
--- a/chrome/browser/chromeos/accessibility/magnification_manager.cc |
+++ b/chrome/browser/chromeos/accessibility/magnification_manager.cc |
@@ -34,7 +34,8 @@ class MagnificationManagerImpl : public MagnificationManager, |
public: |
MagnificationManagerImpl() : first_time_update_(true), |
profile_(NULL), |
- type_(ash::MAGNIFIER_OFF) { |
+ type_(ash::DEFAULT_MAGNIFIER_TYPE), |
+ enabled_(false) { |
registrar_.Add(this, |
chrome::NOTIFICATION_SESSION_STARTED, |
content::NotificationService::AllSources()); |
@@ -51,64 +52,111 @@ class MagnificationManagerImpl : public MagnificationManager, |
} |
// MagnificationManager implimentation: |
- ash::MagnifierType GetMagnifierType() OVERRIDE { |
+ bool IsMagnifierEnabled() const OVERRIDE { |
+ return enabled_; |
+ } |
+ |
+ ash::MagnifierType GetMagnifierType() const OVERRIDE { |
return type_; |
} |
- void SetMagnifier(ash::MagnifierType type) OVERRIDE { |
- if (type == type_ && type == ash::MAGNIFIER_OFF) |
+ void SetMagnifierEnabled(bool enabled) OVERRIDE { |
+ if (enabled_ == enabled && !enabled) |
Daniel Erat
2013/01/08 00:28:49
i'm a bit surprised by this -- you need to do the
yoshiki
2013/01/09 03:03:15
We need the rest of the work. Added a comment.
On
|
+ return; |
+ |
+ enabled_ = enabled; |
+ |
+ if (profile_) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ DCHECK(prefs); |
+ if (enabled != prefs->GetBoolean(prefs::kScreenMagnifierEnabled)) { |
Daniel Erat
2013/01/08 00:28:49
shouldn't we already match the pref? why is this
yoshiki
2013/01/09 03:03:15
We need to keep it for the reason in the above com
|
+ prefs->SetBoolean(prefs::kScreenMagnifierEnabled, enabled); |
+ prefs->CommitPendingWrite(); |
+ } |
+ } |
+ |
+ NotifyMagnifierChanged(); |
+ |
+ if (type_ == ash::MAGNIFIER_FULL) { |
+ ash::Shell::GetInstance()->magnification_controller()->SetEnabled( |
+ enabled_); |
+ } else { |
+ ash::Shell::GetInstance()->partial_magnification_controller()->SetEnabled( |
+ enabled_); |
+ } |
+ } |
+ |
+ void SetMagnifierType(ash::MagnifierType type) OVERRIDE { |
+ if (type_ == type) |
return; |
+ DCHECK(type == ash::MAGNIFIER_FULL || type == ash::MAGNIFIER_PARTIAL); |
type_ = type; |
if (profile_) { |
PrefService* prefs = profile_->GetPrefs(); |
- if (prefs) { |
- bool enabled = (type != ash::MAGNIFIER_OFF); |
- if (enabled != prefs->GetBoolean(prefs::kScreenMagnifierEnabled)) { |
- prefs->SetBoolean(prefs::kScreenMagnifierEnabled, enabled); |
- prefs->CommitPendingWrite(); |
- } |
+ DCHECK(prefs); |
+ if (type != prefs->GetInteger(prefs::kScreenMagnifierType)) { |
Daniel Erat
2013/01/08 00:28:49
ditto here
yoshiki
2013/01/09 03:03:15
Done. This can be removed.
|
+ prefs->SetInteger(prefs::kScreenMagnifierType, type); |
+ prefs->CommitPendingWrite(); |
} |
} |
- accessibility::AccessibilityStatusEventDetails details( |
- type != ash::MAGNIFIER_OFF, ash::A11Y_NOTIFICATION_NONE); |
- content::NotificationService::current()->Notify( |
- chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER, |
- content::NotificationService::AllSources(), |
- content::Details<accessibility::AccessibilityStatusEventDetails>( |
- &details)); |
- |
- ash::Shell::GetInstance()->magnification_controller()->SetEnabled( |
- type == ash::MAGNIFIER_FULL); |
- ash::Shell::GetInstance()->partial_magnification_controller()->SetEnabled( |
- type == ash::MAGNIFIER_PARTIAL); |
+ NotifyMagnifierChanged(); |
+ |
+ if (enabled_) { |
+ ash::Shell::GetInstance()->magnification_controller()->SetEnabled( |
+ type_ == ash::MAGNIFIER_FULL); |
+ ash::Shell::GetInstance()->partial_magnification_controller()->SetEnabled( |
+ type_ == ash::MAGNIFIER_PARTIAL); |
+ } |
} |
void SaveScreenMagnifierScale(double scale) OVERRIDE { |
Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord(); |
+ DCHECK(profile->GetPrefs()); |
profile->GetPrefs()->SetDouble(prefs::kScreenMagnifierScale, scale); |
} |
- double GetSavedScreenMagnifierScale() OVERRIDE { |
+ double GetSavedScreenMagnifierScale() const OVERRIDE { |
Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord(); |
+ DCHECK(profile->GetPrefs()); |
if (profile->GetPrefs()->HasPrefPath(prefs::kScreenMagnifierScale)) |
return profile->GetPrefs()->GetDouble(prefs::kScreenMagnifierScale); |
return std::numeric_limits<double>::min(); |
} |
private: |
+ void NotifyMagnifierChanged() { |
+ accessibility::AccessibilityStatusEventDetails details( |
+ enabled_, type_, ash::A11Y_NOTIFICATION_NONE); |
+ content::NotificationService::current()->Notify( |
+ chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER, |
+ content::NotificationService::AllSources(), |
+ content::Details<accessibility::AccessibilityStatusEventDetails>( |
+ &details)); |
+ } |
+ |
+ bool IsMagnifierEnabledFromPref() { |
+ if (!profile_) |
+ return false; |
+ |
+ DCHECK(profile_->GetPrefs()); |
+ return profile_->GetPrefs()->GetBoolean(prefs::kScreenMagnifierEnabled); |
+ } |
+ |
ash::MagnifierType GetMagnifierTypeFromPref() { |
if (!profile_) |
- return ash::MAGNIFIER_OFF; |
+ return ash::DEFAULT_MAGNIFIER_TYPE; |
+ |
+ DCHECK(profile_->GetPrefs()); |
+ ash::MagnifierType type = static_cast<ash::MagnifierType>( |
+ profile_->GetPrefs()->GetInteger(prefs::kScreenMagnifierType)); |
- PrefService* prefs = profile_->GetPrefs(); |
- if (!prefs) |
- return ash::MAGNIFIER_OFF; |
+ if (type == ash::MAGNIFIER_FULL || type == ash::MAGNIFIER_PARTIAL) |
+ return type; |
- return prefs->GetBoolean(prefs::kScreenMagnifierEnabled) ? |
- ash::MAGNIFIER_FULL : ash::MAGNIFIER_OFF; |
+ return ash::DEFAULT_MAGNIFIER_TYPE; |
} |
void SetProfile(Profile* profile) { |
@@ -123,6 +171,10 @@ class MagnificationManagerImpl : public MagnificationManager, |
prefs::kScreenMagnifierEnabled, |
base::Bind(&MagnificationManagerImpl::UpdateMagnifierStatus, |
base::Unretained(this))); |
+ pref_change_registrar_->Add( |
+ prefs::kScreenMagnifierType, |
+ base::Bind(&MagnificationManagerImpl::UpdateMagnifierStatus, |
+ base::Unretained(this))); |
} |
profile_ = profile; |
@@ -130,8 +182,14 @@ class MagnificationManagerImpl : public MagnificationManager, |
} |
void UpdateMagnifierStatus() { |
Daniel Erat
2013/01/08 00:28:49
nit: maybe rename this to something like UpdateMag
yoshiki
2013/01/09 03:03:15
Done.
|
- ash::MagnifierType type = GetMagnifierTypeFromPref(); |
- SetMagnifier(type); |
+ bool enabled = IsMagnifierEnabledFromPref(); |
+ if (!enabled) { |
+ SetMagnifierEnabled(enabled); |
+ SetMagnifierType(GetMagnifierTypeFromPref()); |
+ } else { |
+ SetMagnifierType(GetMagnifierTypeFromPref()); |
+ SetMagnifierEnabled(enabled); |
+ } |
} |
// content::NotificationObserver implimentation: |
@@ -155,6 +213,7 @@ class MagnificationManagerImpl : public MagnificationManager, |
bool first_time_update_; |
Profile* profile_; |
ash::MagnifierType type_; |
+ bool enabled_; |
content::NotificationRegistrar registrar_; |
scoped_ptr<PrefChangeRegistrar> pref_change_registrar_; |