#ifndef PLATFORM_IMPL_LINUX_DEVICE_INFO_H_ #define PLATFORM_IMPL_LINUX_DEVICE_INFO_H_ #include #include #include #include #include #include "absl/container/flat_hash_map.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" #include "internal/platform/implementation/device_info.h" #include "internal/platform/implementation/linux/hostname_client_glue.h" #include "internal/platform/implementation/linux/login_session_client_glue.h" namespace nearby { namespace linux { class CurrentUserSession : public sdbus::ProxyInterfaces { public: CurrentUserSession(sdbus::IConnection &system_bus) : ProxyInterfaces(system_bus, "org.freedesktop.login1", "/org/freedesktop/login1/session/auto") { registerProxy(); } ~CurrentUserSession() { unregisterProxy(); } void RegisterScreenLockedListener( absl::string_view listener_name, std::function callback) ABSL_LOCKS_EXCLUDED(screen_lock_listeners_mutex_); void UnregisterScreenLockedListener(absl::string_view listener_name) ABSL_LOCKS_EXCLUDED(screen_lock_listeners_mutex_); protected: void onPauseDevice(const uint32_t &major, const uint32_t &minor, const std::string &type) override {} void onResumeDevice(const uint32_t &major, const uint32_t &minor, const sdbus::UnixFd &fd) override {} void onLock() override ABSL_LOCKS_EXCLUDED(screen_lock_listeners_mutex_); void onUnlock() override ABSL_LOCKS_EXCLUDED(screen_lock_listeners_mutex_); private: absl::Mutex screen_lock_listeners_mutex_; absl::flat_hash_map> screen_lock_listeners_ ABSL_GUARDED_BY(screen_lock_listeners_mutex_); }; class Hostnamed : public sdbus::ProxyInterfaces { public: Hostnamed(sdbus::IConnection &system_bus) : ProxyInterfaces(system_bus, "org.freedesktop.hostname1", "/org/freedesktop/hostname1") { registerProxy(); } ~Hostnamed() { unregisterProxy(); } }; class DeviceInfo : public api::DeviceInfo { public: DeviceInfo(sdbus::IConnection &system_bus); ~DeviceInfo() override = default; std::optional GetOsDeviceName() const override; api::DeviceInfo::DeviceType GetDeviceType() const override; api::DeviceInfo::OsType GetOsType() const override { return api::DeviceInfo::OsType::kWindows; // Or ChromeOS? } std::optional GetFullName() const override; std::optional GetGivenName() const override { return GetFullName(); } std::optional GetLastName() const override { return GetFullName(); } std::optional GetProfileUserName() const override; std::optional GetDownloadPath() const override; std::optional GetLocalAppDataPath() const override; std::optional GetCommonAppDataPath() const override { return std::nullopt; }; std::optional GetTemporaryPath() const override; std::optional GetLogPath() const override; std::optional GetCrashDumpPath() const override; bool IsScreenLocked() const override; // TODO: Implement listening to logind for changes to LockedState. void RegisterScreenLockedListener( absl::string_view listener_name, std::function callback) override{}; void UnregisterScreenLockedListener(absl::string_view listener_name) override{}; private: sdbus::IConnection &system_bus_; std::unique_ptr current_user_session_; }; } // namespace linux } // namespace nearby #endif // PLATFORM_IMPL_LINUX_DEVICE_INFO_H_