Commit 8ce89c33 authored by Sarah Hu's avatar Sarah Hu Committed by Commit Bot

cros: Notify user activity when receive fingerprint attempts

Currently fingerprint attempts are not treated as user activities.
So when the screen is off, user touch the sensor with an enrolled finger
will silently unlock the screen, with the screen remains off.
And after hitting a key, the screen turns on and already unlocked which
makes user think the screen is never locked.

This CL reports fingerprint attempts as user activity so when user touch
the sensor, the screen will be turned on.


Bug: b:115779078
Change-Id: I10acd8cc3eccb7d594465573fecf9f3099a65f8d
Reviewed-on: https://chromium-review.googlesource.com/1236556
Commit-Queue: Xiaoyin Hu <xiaoyinh@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@chromium.org>
Reviewed-by: default avatarMichael Giuffrida <michaelpg@chromium.org>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarDan Erat <derat@chromium.org>
Reviewed-by: default avatarJames Cook <jamescook@chromium.org>
Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593603}
parent 73ff03f5
...@@ -68,6 +68,7 @@ ...@@ -68,6 +68,7 @@
"*": [ "accessibility", "app" ], "*": [ "accessibility", "app" ],
"ash_pref_connector": [ "pref_connector" ], "ash_pref_connector": [ "pref_connector" ],
"catalog": [ "directory" ], "catalog": [ "directory" ],
"device": [ "device:fingerprint"],
"local_state": [ "pref_client" ], "local_state": [ "pref_client" ],
"multidevice_setup": [ "multidevice_setup" ], "multidevice_setup": [ "multidevice_setup" ],
"quick_launch_app": [ "mash:launchable" ], "quick_launch_app": [ "mash:launchable" ],
......
...@@ -1262,8 +1262,9 @@ void Shell::Init( ...@@ -1262,8 +1262,9 @@ void Shell::Init(
peripheral_battery_notifier_ = std::make_unique<PeripheralBatteryNotifier>(); peripheral_battery_notifier_ = std::make_unique<PeripheralBatteryNotifier>();
power_event_observer_.reset(new PowerEventObserver()); power_event_observer_.reset(new PowerEventObserver());
user_activity_notifier_.reset( user_activity_notifier_ =
new ui::UserActivityPowerManagerNotifier(user_activity_detector_.get())); std::make_unique<ui::UserActivityPowerManagerNotifier>(
user_activity_detector_.get(), connector_);
video_activity_notifier_.reset( video_activity_notifier_.reset(
new VideoActivityNotifier(video_detector_.get())); new VideoActivityNotifier(video_detector_.get()));
bluetooth_notification_controller_.reset(new BluetoothNotificationController); bluetooth_notification_controller_.reset(new BluetoothNotificationController);
......
...@@ -337,7 +337,7 @@ void ShellDesktopControllerAura::InitWindowManager() { ...@@ -337,7 +337,7 @@ void ShellDesktopControllerAura::InitWindowManager() {
user_activity_detector_ = std::make_unique<ui::UserActivityDetector>(); user_activity_detector_ = std::make_unique<ui::UserActivityDetector>();
user_activity_notifier_ = user_activity_notifier_ =
std::make_unique<ui::UserActivityPowerManagerNotifier>( std::make_unique<ui::UserActivityPowerManagerNotifier>(
user_activity_detector_.get()); user_activity_detector_.get(), nullptr /*connector*/);
#endif #endif
} }
......
...@@ -34,6 +34,8 @@ component("chromeos") { ...@@ -34,6 +34,8 @@ component("chromeos") {
"//components/device_event_log", "//components/device_event_log",
"//components/onc", "//components/onc",
"//mojo/public/cpp/bindings", "//mojo/public/cpp/bindings",
"//services/device/public/mojom",
"//services/service_manager/public/cpp",
"//services/ws/public/cpp", "//services/ws/public/cpp",
"//services/ws/public/mojom", "//services/ws/public/mojom",
"//skia", "//skia",
......
...@@ -5,6 +5,8 @@ include_rules = [ ...@@ -5,6 +5,8 @@ include_rules = [
"+grit/ui_chromeos_resources.h", "+grit/ui_chromeos_resources.h",
"+grit/ui_chromeos_strings.h", "+grit/ui_chromeos_strings.h",
"+mojo/public/cpp/bindings", "+mojo/public/cpp/bindings",
"+services/device/public",
"+services/service_manager/public",
"+services/ws/public/cpp", "+services/ws/public/cpp",
"+services/ws/public/mojom", "+services/ws/public/mojom",
"+third_party/cros_system_api", "+third_party/cros_system_api",
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager_client.h" #include "chromeos/dbus/power_manager_client.h"
#include "services/device/public/mojom/constants.mojom.h"
#include "services/service_manager/public/cpp/connector.h"
#include "ui/base/user_activity/user_activity_detector.h" #include "ui/base/user_activity/user_activity_detector.h"
#include "ui/events/devices/input_device_manager.h" #include "ui/events/devices/input_device_manager.h"
#include "ui/events/devices/stylus_state.h" #include "ui/events/devices/stylus_state.h"
...@@ -44,10 +46,21 @@ power_manager::UserActivityType GetUserActivityTypeForEvent( ...@@ -44,10 +46,21 @@ power_manager::UserActivityType GetUserActivityTypeForEvent(
} // namespace } // namespace
UserActivityPowerManagerNotifier::UserActivityPowerManagerNotifier( UserActivityPowerManagerNotifier::UserActivityPowerManagerNotifier(
UserActivityDetector* detector) UserActivityDetector* detector,
: detector_(detector) { service_manager::Connector* connector)
: detector_(detector), fingerprint_observer_binding_(this) {
detector_->AddObserver(this); detector_->AddObserver(this);
ui::InputDeviceManager::GetInstance()->AddObserver(this); ui::InputDeviceManager::GetInstance()->AddObserver(this);
// Connector can be null in tests.
if (connector) {
// Treat fingerprint attempts as user activies to turn on the screen.
// I.e., when user tried to use fingerprint to unlock.
connector->BindInterface(device::mojom::kServiceName, &fingerprint_ptr_);
device::mojom::FingerprintObserverPtr observer;
fingerprint_observer_binding_.Bind(mojo::MakeRequest(&observer));
fingerprint_ptr_->AddFingerprintObserver(std::move(observer));
}
} }
UserActivityPowerManagerNotifier::~UserActivityPowerManagerNotifier() { UserActivityPowerManagerNotifier::~UserActivityPowerManagerNotifier() {
...@@ -65,6 +78,23 @@ void UserActivityPowerManagerNotifier::OnUserActivity(const Event* event) { ...@@ -65,6 +78,23 @@ void UserActivityPowerManagerNotifier::OnUserActivity(const Event* event) {
MaybeNotifyUserActivity(GetUserActivityTypeForEvent(event)); MaybeNotifyUserActivity(GetUserActivityTypeForEvent(event));
} }
void UserActivityPowerManagerNotifier::OnAuthScanDone(
uint32_t scan_result,
const base::flat_map<std::string, std::vector<std::string>>& matches) {
MaybeNotifyUserActivity(power_manager::USER_ACTIVITY_OTHER);
}
void UserActivityPowerManagerNotifier::OnSessionFailed() {}
void UserActivityPowerManagerNotifier::OnRestarted() {}
void UserActivityPowerManagerNotifier::OnEnrollScanDone(
uint32_t scan_result,
bool enroll_session_complete,
int percent_complete) {
MaybeNotifyUserActivity(power_manager::USER_ACTIVITY_OTHER);
}
void UserActivityPowerManagerNotifier::MaybeNotifyUserActivity( void UserActivityPowerManagerNotifier::MaybeNotifyUserActivity(
power_manager::UserActivityType user_activity_type) { power_manager::UserActivityType user_activity_type) {
base::TimeTicks now = base::TimeTicks::Now(); base::TimeTicks now = base::TimeTicks::Now();
......
...@@ -8,11 +8,17 @@ ...@@ -8,11 +8,17 @@
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "services/device/public/mojom/fingerprint.mojom.h"
#include "third_party/cros_system_api/dbus/service_constants.h" #include "third_party/cros_system_api/dbus/service_constants.h"
#include "ui/base/user_activity/user_activity_observer.h" #include "ui/base/user_activity/user_activity_observer.h"
#include "ui/chromeos/ui_chromeos_export.h" #include "ui/chromeos/ui_chromeos_export.h"
#include "ui/events/devices/input_device_event_observer.h" #include "ui/events/devices/input_device_event_observer.h"
namespace service_manager {
class Connector;
}
namespace ui { namespace ui {
class UserActivityDetector; class UserActivityDetector;
...@@ -20,11 +26,13 @@ class UserActivityDetector; ...@@ -20,11 +26,13 @@ class UserActivityDetector;
// Notifies the power manager via D-Bus when the user is active. // Notifies the power manager via D-Bus when the user is active.
class UI_CHROMEOS_EXPORT UserActivityPowerManagerNotifier class UI_CHROMEOS_EXPORT UserActivityPowerManagerNotifier
: public InputDeviceEventObserver, : public InputDeviceEventObserver,
public UserActivityObserver { public UserActivityObserver,
public device::mojom::FingerprintObserver {
public: public:
// Registers and unregisters itself as an observer of |detector| on // Registers and unregisters itself as an observer of |detector| on
// construction and destruction. // construction and destruction.
explicit UserActivityPowerManagerNotifier(UserActivityDetector* detector); UserActivityPowerManagerNotifier(UserActivityDetector* detector,
service_manager::Connector* connector);
~UserActivityPowerManagerNotifier() override; ~UserActivityPowerManagerNotifier() override;
// InputDeviceEventObserver implementation. // InputDeviceEventObserver implementation.
...@@ -33,6 +41,17 @@ class UI_CHROMEOS_EXPORT UserActivityPowerManagerNotifier ...@@ -33,6 +41,17 @@ class UI_CHROMEOS_EXPORT UserActivityPowerManagerNotifier
// UserActivityObserver implementation. // UserActivityObserver implementation.
void OnUserActivity(const Event* event) override; void OnUserActivity(const Event* event) override;
// fingerprint::mojom::FingerprintObserver:
void OnAuthScanDone(
uint32_t scan_result,
const base::flat_map<std::string, std::vector<std::string>>& matches)
override;
void OnSessionFailed() override;
void OnRestarted() override;
void OnEnrollScanDone(uint32_t scan_result,
bool enroll_session_complete,
int percent_complete) override;
private: private:
// Notifies power manager that the user is active and activity type. No-op if // Notifies power manager that the user is active and activity type. No-op if
// it is within 5 seconds from |last_notify_time_|. // it is within 5 seconds from |last_notify_time_|.
...@@ -41,6 +60,10 @@ class UI_CHROMEOS_EXPORT UserActivityPowerManagerNotifier ...@@ -41,6 +60,10 @@ class UI_CHROMEOS_EXPORT UserActivityPowerManagerNotifier
UserActivityDetector* detector_; // not owned UserActivityDetector* detector_; // not owned
device::mojom::FingerprintPtr fingerprint_ptr_;
mojo::Binding<device::mojom::FingerprintObserver>
fingerprint_observer_binding_;
// Last time that the power manager was notified. // Last time that the power manager was notified.
base::TimeTicks last_notify_time_; base::TimeTicks last_notify_time_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment