diff options
author | stevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-15 17:05:58 +0000 |
---|---|---|
committer | stevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-15 17:05:58 +0000 |
commit | d40e880e8638f7374f06af11874d24a08baeb232 (patch) | |
tree | 70ff459fc6bd41fc412a001ab34691d025c6ae9a /chromeos | |
parent | 8d9e70bd93056befc9a5590036bdbdf198e4f2be (diff) | |
download | chromium_src-d40e880e8638f7374f06af11874d24a08baeb232.zip chromium_src-d40e880e8638f7374f06af11874d24a08baeb232.tar.gz chromium_src-d40e880e8638f7374f06af11874d24a08baeb232.tar.bz2 |
Don't show system notifications while the screen is locked.
Change-Id: Ie6079866fb0b957e56aff2993745e8976c4fb10b
BUG=124402
TEST=Test system notifications (power, network, sms) especially around screen lock/unlock.
Review URL: https://chromiumcodereview.appspot.com/10382118
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137159 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r-- | chromeos/dbus/mock_power_manager_client.h | 1 | ||||
-rw-r--r-- | chromeos/dbus/power_manager_client.cc | 18 | ||||
-rw-r--r-- | chromeos/dbus/power_manager_client.h | 5 |
3 files changed, 22 insertions, 2 deletions
diff --git a/chromeos/dbus/mock_power_manager_client.h b/chromeos/dbus/mock_power_manager_client.h index 81e8fdd..5d03e31 100644 --- a/chromeos/dbus/mock_power_manager_client.h +++ b/chromeos/dbus/mock_power_manager_client.h @@ -40,6 +40,7 @@ class MockPowerManagerClient : public PowerManagerClient { MOCK_METHOD0(NotifyScreenLockCompleted, void(void)); MOCK_METHOD0(NotifyScreenUnlockRequested, void(void)); MOCK_METHOD0(NotifyScreenUnlockCompleted, void(void)); + MOCK_METHOD0(GetIsScreenLocked, bool(void)); }; } // namespace chromeos diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc index 5c03a1a..e09e2f8 100644 --- a/chromeos/dbus/power_manager_client.cc +++ b/chromeos/dbus/power_manager_client.cc @@ -29,6 +29,7 @@ class PowerManagerClientImpl : public PowerManagerClient { public: explicit PowerManagerClientImpl(dbus::Bus* bus) : power_manager_proxy_(NULL), + screen_locked_(false), weak_ptr_factory_(this) { power_manager_proxy_ = bus->GetObjectProxy( power_manager::kPowerManagerServiceName, @@ -270,6 +271,10 @@ class PowerManagerClientImpl : public PowerManagerClient { SimpleMethodCallToPowerManager(power_manager::kScreenIsUnlockedMethod); } + virtual bool GetIsScreenLocked() OVERRIDE { + return screen_locked_; + } + private: // Called when a dbus signal is initially connected. void SignalConnected(const std::string& interface_name, @@ -437,10 +442,12 @@ class PowerManagerClientImpl : public PowerManagerClient { // as expected. As per http://crbug.com/126217, this will help determine // if the problem is with dbus or in chrome. LOG(WARNING) << "LockScreen signal received from power manager."; + screen_locked_ = true; FOR_EACH_OBSERVER(Observer, observers_, LockScreen()); } void ScreenUnlockSignalReceived(dbus::Signal* signal) { + screen_locked_ = false; FOR_EACH_OBSERVER(Observer, observers_, UnlockScreen()); } @@ -502,6 +509,7 @@ class PowerManagerClientImpl : public PowerManagerClient { dbus::ObjectProxy* power_manager_proxy_; dbus::ObjectProxy* session_manager_proxy_; ObserverList<Observer> observers_; + bool screen_locked_; base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(PowerManagerClientImpl); @@ -515,7 +523,8 @@ class PowerManagerClientStubImpl : public PowerManagerClient { : discharging_(true), battery_percentage_(40), brightness_(50.0), - pause_count_(2) { + pause_count_(2), + screen_locked_(false) { } virtual ~PowerManagerClientStubImpl() {} @@ -589,14 +598,18 @@ class PowerManagerClientStubImpl : public PowerManagerClient { const PowerStateRequestIdCallback& callback) OVERRIDE {} virtual void NotifyScreenLockRequested() OVERRIDE { + screen_locked_ = true; FOR_EACH_OBSERVER(Observer, observers_, LockScreen()); } virtual void NotifyScreenLockCompleted() OVERRIDE {} virtual void NotifyScreenUnlockRequested() OVERRIDE { + screen_locked_ = false; FOR_EACH_OBSERVER(Observer, observers_, UnlockScreen()); } - virtual void NotifyScreenUnlockCompleted() OVERRIDE {} + virtual bool GetIsScreenLocked() OVERRIDE { + return screen_locked_; + } private: void Update() { @@ -644,6 +657,7 @@ class PowerManagerClientStubImpl : public PowerManagerClient { ObserverList<Observer> observers_; base::RepeatingTimer<PowerManagerClientStubImpl> timer_; PowerSupplyStatus status_; + bool screen_locked_; }; PowerManagerClient::PowerManagerClient() { diff --git a/chromeos/dbus/power_manager_client.h b/chromeos/dbus/power_manager_client.h index 00c27b8..e224395 100644 --- a/chromeos/dbus/power_manager_client.h +++ b/chromeos/dbus/power_manager_client.h @@ -141,6 +141,11 @@ class CHROMEOS_EXPORT PowerManagerClient { // Notifies PowerManager that screen is unlocked. virtual void NotifyScreenUnlockCompleted() = 0; + // Return whether or not the screen is locked. Implementation should cache + // this state so that it can return immediately. Useful for observers that + // need to know the current screen lock state when they are added. + virtual bool GetIsScreenLocked() = 0; + // Idle management functions: // Calculates idle time asynchronously, after the idle time request has |