diff --git a/access_token.gni b/access_token.gni index e3bbe7321b2d1365ede0f78e7fe04bf348fc9859..1d3cb334bc95c833f0f9e91002269eb8621f7bf2 100644 --- a/access_token.gni +++ b/access_token.gni @@ -140,6 +140,7 @@ if (!defined(global_parts_info) || declare_args() { access_token_camera_float_window_enable = true + access_token_camera_control_enable = true; } if (!defined(global_parts_info) || diff --git a/bundle.json b/bundle.json index 285efcc94bc58d81acc18b915b9725468b9c66c5..0f2e15548048a81ea3ad43f40e7c96dd86d57243 100644 --- a/bundle.json +++ b/bundle.json @@ -21,7 +21,8 @@ ], "features": [ "access_token_feature_coverage", - "access_token_camera_float_window_enable" + "access_token_camera_float_window_enable", + "access_token_camera_control_enable" ], "adapted_system_type": [ "standard" ], "rom": "10000KB", diff --git a/services/privacymanager/BUILD.gn b/services/privacymanager/BUILD.gn index 92c48374a9486a510333186c231c5ee60f140d50..813f5a7b0d6f2e09d2c6bf11bfdb9a15eeacc1d7 100644 --- a/services/privacymanager/BUILD.gn +++ b/services/privacymanager/BUILD.gn @@ -155,21 +155,24 @@ if (is_standard_system && ability_base_enable == true) { sources += [ "src/seccomp/privacy_sec_comp_enhance_agent.cpp" ] } - if (window_manager_enable && access_token_camera_float_window_enable) { - cflags_cc += [ "-DCAMERA_FLOAT_WINDOW_ENABLE" ] - include_dirs += - [ "${access_token_path}/services/common/window_manager/include" ] - sources += [ - "${access_token_path}/services/common/window_manager/src/privacy_mock_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_lite_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_agent.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_client.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_death_recipient.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_proxy.cpp", - ] - external_deps += [ "window_manager:libwsutils" ] + if (access_token_camera_control_enable) { + cflags_cc += [ "-DCAMERA_CONTROL_ENABLE" ] + if (window_manager_enable && access_token_camera_float_window_enable) { + cflags_cc += [ "-DCAMERA_FLOAT_WINDOW_ENABLE" ] + include_dirs += + [ "${access_token_path}/services/common/window_manager/include" ] + sources += [ + "${access_token_path}/services/common/window_manager/src/privacy_mock_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_lite_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_agent.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_client.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_death_recipient.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_proxy.cpp", + ] + external_deps += [ "window_manager:libwsutils" ] + } } if (access_token_app_security_privacy_service_enable) { diff --git a/services/privacymanager/include/record/permission_record_manager.h b/services/privacymanager/include/record/permission_record_manager.h index 29b27d677cffbf18426eddc4eb453b3cb43bb5be..1065a785012f2b478f5e448f62c8665673988866 100644 --- a/services/privacymanager/include/record/permission_record_manager.h +++ b/services/privacymanager/include/record/permission_record_manager.h @@ -106,7 +106,6 @@ public: int32_t SetTempMutePolicy(const std::string permissionName, bool isMute); int32_t SetHapWithFGReminder(uint32_t tokenId, bool isAllowed); - void NotifyAppStateChange(AccessTokenID tokenId, int32_t pid, ActiveChangeType status); void SetLockScreenStatus(int32_t lockScreenStatus); int32_t GetLockScreenStatus(bool isIpc = false); @@ -114,9 +113,10 @@ public: void NotifyCameraWindowChange(bool isPip, AccessTokenID tokenId, bool isShowing); void OnWindowMgrRemoteDied(); #endif +#ifdef CAMERA_CONTROL_ENABLE + void NotifyAppStateChange(AccessTokenID tokenId, int32_t pid, ActiveChangeType status); void OnAppMgrRemoteDiedHandle(); - void OnAudioMgrRemoteDiedHandle(); - void OnCameraMgrRemoteDiedHandle(); +#endif void RemoveRecordFromStartListByPid(const AccessTokenID tokenId, int32_t pid); void RemoveRecordFromStartListByToken(const AccessTokenID tokenId); void RemoveRecordFromStartListByOp(int32_t opCode); @@ -190,9 +190,7 @@ private: void InitializeMuteState(const std::string& permissionName); int32_t GetAppStatus(AccessTokenID tokenId, int32_t pid = -1); - bool RegisterAppStatusListener(); bool Register(); - bool RegisterApplicationStateObserver(); void Unregister(); bool GetMuteParameter(const char* key, bool& isMute); @@ -222,6 +220,7 @@ private: bool isCamMixMute_ = false; bool isCamLoad_ = false; +#ifdef CAMERA_CONTROL_ENABLE // appState std::mutex appStateMutex_; sptr appStateCallback_ = nullptr; @@ -229,6 +228,7 @@ private: // app manager death std::mutex appManagerDeathMutex_; std::shared_ptr appManagerDeathCallback_ = nullptr; +#endif // lockScreenState std::mutex lockScreenStateMutex_; diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index d1f2fe7ebd701fe03391040348239cf6f2b9b025..6d7e50259c2070da15a70935355b238c5aa4e2cf 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -112,6 +112,7 @@ PermissionRecordManager::~PermissionRecordManager() Unregister(); } +#ifdef CAMERA_CONTROL_ENABLE void PrivacyAppStateObserver::OnAppStateChanged(const AppStateData &appStateData) { ACCESSTOKEN_LOG_DEBUG(LABEL, "OnChange(id=%{public}d, pid=%{public}d, state=%{public}d).", @@ -149,6 +150,25 @@ void PrivacyAppManagerDeathCallback::NotifyAppManagerDeath() PermissionRecordManager::GetInstance().OnAppMgrRemoteDiedHandle(); } +void PermissionRecordManager::OnAppMgrRemoteDiedHandle() +{ + ACCESSTOKEN_LOG_INFO(LABEL, "Handle app fwk died."); + std::lock_guard lock(appStateMutex_); + appStateCallback_ = nullptr; +} + +/* + * when foreground change background or background change foreground,change accessDuration and store in database, + * change status and accessDuration and timestamp in cache +*/ +void PermissionRecordManager::NotifyAppStateChange(AccessTokenID tokenId, int32_t pid, ActiveChangeType status) +{ + ACCESSTOKEN_LOG_INFO(LABEL, "Id %{public}u, pid %{public}d, status %{public}d", tokenId, pid, status); + // find permissions from startRecordList_ by tokenId which status diff from currStatus + ExecuteAndUpdateRecord(tokenId, pid, status); +} +#endif + void PermissionRecordManager::AddRecToCacheAndValueVec(const PermissionRecord& record, std::vector& values) { @@ -1016,17 +1036,6 @@ void PermissionRecordManager::ExecuteAndUpdateRecord(uint32_t tokenId, int32_t p } } -/* - * when foreground change background or background change foreground,change accessDuration and store in database, - * change status and accessDuration and timestamp in cache -*/ -void PermissionRecordManager::NotifyAppStateChange(AccessTokenID tokenId, int32_t pid, ActiveChangeType status) -{ - ACCESSTOKEN_LOG_INFO(LABEL, "Id %{public}u, pid %{public}d, status %{public}d", tokenId, pid, status); - // find permissions from startRecordList_ by tokenId which status diff from currStatus - ExecuteAndUpdateRecord(tokenId, pid, status); -} - void PermissionRecordManager::SetLockScreenStatus(int32_t lockScreenStatus) { ACCESSTOKEN_LOG_INFO(LABEL, "LockScreenStatus %{public}d", lockScreenStatus); @@ -1698,6 +1707,7 @@ int32_t PermissionRecordManager::GetAppStatus(AccessTokenID tokenId, int32_t pid bool PermissionRecordManager::Register() { +#ifdef CAMERA_CONTROL_ENABLE // app manager death callback register { std::lock_guard lock(appManagerDeathMutex_); @@ -1726,6 +1736,7 @@ bool PermissionRecordManager::Register() } } } +#endif return true; } @@ -1840,12 +1851,14 @@ void PermissionRecordManager::InitializeMuteState(const std::string& permissionN void PermissionRecordManager::Unregister() { +#ifdef CAMERA_CONTROL_ENABLE // app state change callback unregister std::lock_guard lock(appStateMutex_); if (appStateCallback_ != nullptr) { AppManagerAccessClient::GetInstance().UnregisterApplicationStateObserver(appStateCallback_); appStateCallback_= nullptr; } +#endif } bool PermissionRecordManager::GetMuteParameter(const char* key, bool& isMute) @@ -1864,34 +1877,6 @@ bool PermissionRecordManager::GetMuteParameter(const char* key, bool& isMute) return true; } -void PermissionRecordManager::OnAppMgrRemoteDiedHandle() -{ - ACCESSTOKEN_LOG_INFO(LABEL, "Handle app fwk died."); - std::lock_guard lock(appStateMutex_); - appStateCallback_ = nullptr; -} - -void PermissionRecordManager::OnAudioMgrRemoteDiedHandle() -{ - ACCESSTOKEN_LOG_INFO(LABEL, "Handle audio fwk died."); - { - std::lock_guard lock(micLoadMutex_); - isMicLoad_ = false; - } -} - -void PermissionRecordManager::OnCameraMgrRemoteDiedHandle() -{ - ACCESSTOKEN_LOG_INFO(LABEL, "Handle camera fwk died."); - { - std::lock_guard lock(camLoadMutex_); - isCamLoad_ = false; - } -#ifdef CAMERA_FLOAT_WINDOW_ENABLE - ClearWindowShowing(); -#endif -} - bool PermissionRecordManager::IsCameraWindowShow(AccessTokenID tokenId) { bool isShow = true; diff --git a/services/privacymanager/test/coverage/BUILD.gn b/services/privacymanager/test/coverage/BUILD.gn index 2fad215660910147ab16f8175dfdf110b159a6cd..a68de0986bfd3e3599f1ad21859bb9d9220c163d 100644 --- a/services/privacymanager/test/coverage/BUILD.gn +++ b/services/privacymanager/test/coverage/BUILD.gn @@ -125,21 +125,24 @@ if (is_standard_system && ability_base_enable == true) { external_deps += [ "screenlock_mgr:screenlock_client" ] } - if (window_manager_enable && access_token_camera_float_window_enable) { - cflags_cc += [ "-DCAMERA_FLOAT_WINDOW_ENABLE" ] - include_dirs += - [ "${access_token_path}/services/common/window_manager/include" ] - sources += [ - "${access_token_path}/services/common/window_manager/src/privacy_mock_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_lite_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_agent.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_client.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_death_recipient.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_proxy.cpp", - ] - external_deps += [ "window_manager:libwsutils" ] + if (access_token_camera_control_enable) { + cflags_cc += [ "-DCAMERA_CONTROL_ENABLE" ] + if (window_manager_enable && access_token_camera_float_window_enable) { + cflags_cc += [ "-DCAMERA_FLOAT_WINDOW_ENABLE" ] + include_dirs += + [ "${access_token_path}/services/common/window_manager/include" ] + sources += [ + "${access_token_path}/services/common/window_manager/src/privacy_mock_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_lite_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_agent.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_client.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_death_recipient.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_proxy.cpp", + ] + external_deps += [ "window_manager:libwsutils" ] + } } if (access_token_app_security_privacy_service_enable) { cflags_cc += [ "-DAPP_SECURITY_PRIVACY_SERVICE" ] diff --git a/services/privacymanager/test/unittest/BUILD.gn b/services/privacymanager/test/unittest/BUILD.gn index 9899247f5eb0c611c00a77c71015813584d5b46b..90530a6e4abe858f60235530f212344531a9294f 100644 --- a/services/privacymanager/test/unittest/BUILD.gn +++ b/services/privacymanager/test/unittest/BUILD.gn @@ -131,21 +131,24 @@ if (is_standard_system && ability_base_enable == true) { external_deps += [ "screenlock_mgr:screenlock_client" ] } - if (window_manager_enable && access_token_camera_float_window_enable) { - cflags_cc += [ "-DCAMERA_FLOAT_WINDOW_ENABLE" ] - include_dirs += - [ "${access_token_path}/services/common/window_manager/include" ] - sources += [ - "${access_token_path}/services/common/window_manager/src/privacy_mock_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_lite_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_agent.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_client.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_death_recipient.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_proxy.cpp", - ] - external_deps += [ "window_manager:libwsutils" ] + if (access_token_camera_control_enable) { + cflags_cc += [ "-DCAMERA_CONTROL_ENABLE" ] + if (window_manager_enable && access_token_camera_float_window_enable) { + cflags_cc += [ "-DCAMERA_FLOAT_WINDOW_ENABLE" ] + include_dirs += + [ "${access_token_path}/services/common/window_manager/include" ] + sources += [ + "${access_token_path}/services/common/window_manager/src/privacy_mock_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_lite_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_agent.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_client.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_death_recipient.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_proxy.cpp", + ] + external_deps += [ "window_manager:libwsutils" ] + } } if (access_token_app_security_privacy_service_enable) { diff --git a/test/fuzztest/services/privacy/privacy_service_fuzz.gni b/test/fuzztest/services/privacy/privacy_service_fuzz.gni index f8bcdfa4f10f0f5c033ca56a51a7f56a3aae6c01..ca32e74faa8b972726a3cad38bc4663cae89ccff 100644 --- a/test/fuzztest/services/privacy/privacy_service_fuzz.gni +++ b/test/fuzztest/services/privacy/privacy_service_fuzz.gni @@ -106,21 +106,25 @@ if (common_event_service_enable) { privacy_sources += [ "${access_token_path}/services/privacymanager/src/common/privacy_common_event_subscriber.cpp" ] } -if (window_manager_enable && access_token_camera_float_window_enable) { - privacy_cflags_cc += [ "-DCAMERA_FLOAT_WINDOW_ENABLE" ] - privacy_include_dirs += - [ "${access_token_path}/services/common/window_manager/include" ] - privacy_sources += [ - "${access_token_path}/services/common/window_manager/src/privacy_mock_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_lite_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_session_manager_proxy.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_agent.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_client.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_death_recipient.cpp", - "${access_token_path}/services/common/window_manager/src/privacy_window_manager_proxy.cpp", - ] - privacy_external_deps += [ "window_manager:libwsutils" ] +if (access_token_camera_control_enable) { + cflags_cc += [ "-DCAMERA_CONTROL_ENABLE" ] + + if (window_manager_enable && access_token_camera_float_window_enable) { + privacy_cflags_cc += [ "-DCAMERA_FLOAT_WINDOW_ENABLE" ] + privacy_include_dirs += + [ "${access_token_path}/services/common/window_manager/include" ] + privacy_sources += [ + "${access_token_path}/services/common/window_manager/src/privacy_mock_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_lite_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_scene_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_session_manager_proxy.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_agent.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_client.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_death_recipient.cpp", + "${access_token_path}/services/common/window_manager/src/privacy_window_manager_proxy.cpp", + ] + privacy_external_deps += [ "window_manager:libwsutils" ] + } } if (theme_screenlock_mgr_enable) {