无障碍框架适配隐私空间

Signed-off-by: taojuncun <taojuncun@huawei.com>
This commit is contained in:
taojuncun 2024-03-18 15:57:55 +08:00
parent 8ce9c48cf8
commit 5bb11e58f4
5 changed files with 58 additions and 20 deletions

View File

@ -17,7 +17,9 @@
"permission" : [
"ohos.permission.MANAGE_SECURE_SETTINGS",
"ohos.permission.INTERCEPT_INPUT_EVENT",
"ohos.permission.GET_BUNDLE_INFO_PRIVILEGED"
"ohos.permission.GET_BUNDLE_INFO_PRIVILEGED",
"ohos.permission.MANAGE_LOCAL_ACCOUNTS",
"ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS"
],
"permission_acls" : [
"ohos.permission.INTERCEPT_INPUT_EVENT"

View File

@ -30,6 +30,7 @@
#include "i_accessible_ability_manager_state_observer.h"
#include "element_name.h"
#include "accessibility_setting_provider.h"
#include "os_account_info.h"
namespace OHOS {
namespace Accessibility {
@ -271,7 +272,7 @@ public:
void RemoveUITestClient(sptr<AccessibleAbilityConnection> &connection, const std::string &bundleName);
void SetAbilityAutoStartState(const std::string &name, const bool state);
void DelAutoStartPrefKeyInRemovePkg(const std::string &bundleName);
bool GetAbilityAutoStartState(const std::string &key);
bool GetAbilityAutoStartState(const std::string &name);
void GetConfigValueAtoHos(ConfigValueAtoHosUpdate &value);
private:
@ -303,6 +304,8 @@ private:
*/
void UpdateMagnificationCapability();
AccountSA::OsAccountType GetAccountType();
class AccessibilityAbility {
public:
AccessibilityAbility() = default;
@ -326,6 +329,7 @@ private:
};
int32_t id_;
AccountSA::OsAccountType accountType_ = AccountSA::OsAccountType::END;
bool isEventTouchGuideState_ = false;
bool isScreenMagnification_ = false;
bool isFilteringKeyEvents_ = false;

View File

@ -25,6 +25,7 @@
#include "hilog_wrapper.h"
#include "utils.h"
#include "system_ability_definition.h"
#include "os_account_manager.h"
namespace OHOS {
namespace Accessibility {
@ -39,6 +40,7 @@ namespace {
constexpr int DISPLAY_DALTONIZER_GREEN = 12;
constexpr int DISPLAY_DALTONIZER_RED = 11;
constexpr int DISPLAY_DALTONIZER_BLUE = 13;
constexpr int DEFAULT_ACCOUNT_ID = 100;
const std::string HIGH_TEXT_CONTRAST_ENABLED = "high_text_contrast_enabled";
const std::string ACCESSIBILITY_DISPLAY_INVERSION_ENABLED = "accessibility_display_inversion_enabled";
const std::string ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED = "accessibility_display_daltonizer_enabled";
@ -49,6 +51,7 @@ namespace {
const std::string IGNORE_REPEAT_CLICK_SWITCH = "ignore_repeat_click_switch";
const std::string IGNORE_REPEAT_CLICK_TIME = "ignore_repeat_click_time";
const std::string ACCESSIBILITY_DISPLAY_DALTONIZER = "accessibility_display_daltonizer";
const std::string SCREEN_READER_BUNDLE_ABILITY_NAME = "com.huawei.hmos.screenreader/AccessibilityExtAbility";
} // namespace
AccessibilityAccountData::AccessibilityAccountData(int32_t accountId)
@ -432,6 +435,9 @@ void AccessibilityAccountData::SetAbilityAutoStartState(const std::string &name,
AccessibilitySettingProvider& provider = AccessibilitySettingProvider::GetInstance(POWER_MANAGER_SERVICE_ID);
std::string strState = state ? "on" : "off";
std::string abilityAutoStartKey = name + "/" + std::to_string(id_);
if (name == SCREEN_READER_BUNDLE_ABILITY_NAME && GetAccountType() == AccountSA::OsAccountType::PRIVATE) {
abilityAutoStartKey = name + "/" + std::to_string(DEFAULT_ACCOUNT_ID);
}
ErrCode ret = provider.PutStringValue(abilityAutoStartKey, strState, false);
if (ret != ERR_OK) {
HILOG_ERROR("set failed, ret=%{public}d", ret);
@ -456,23 +462,27 @@ void AccessibilityAccountData::DelAutoStartPrefKeyInRemovePkg(const std::string
}
}
bool AccessibilityAccountData::GetAbilityAutoStartState(const std::string &key)
bool AccessibilityAccountData::GetAbilityAutoStartState(const std::string &name)
{
HILOG_DEBUG();
AccessibilitySettingProvider& provider = AccessibilitySettingProvider::GetInstance(POWER_MANAGER_SERVICE_ID);
std::string strValue;
ErrCode ret = provider.GetStringValue(key, strValue);
std::string strAutoStartStateKey = name + "/" + std::to_string(id_);
if (name == SCREEN_READER_BUNDLE_ABILITY_NAME && GetAccountType() == AccountSA::OsAccountType::PRIVATE) {
strAutoStartStateKey = name + "/" + std::to_string(DEFAULT_ACCOUNT_ID);
}
ErrCode ret = provider.GetStringValue(strAutoStartStateKey, strValue);
if (ret == ERR_NO_INIT) {
HILOG_INFO("helper is null, retry.");
std::this_thread::sleep_for(std::chrono::milliseconds(INIT_DATASHARE_HELPER_SLEEP_TIME));
ret = provider.GetStringValue(key, strValue);
ret = provider.GetStringValue(strAutoStartStateKey, strValue);
}
if (ret != ERR_OK) {
HILOG_ERROR("get failed, key = %{public}s, ret=%{public}d", key.c_str(), ret);
HILOG_ERROR("get failed, key = %{public}s, ret=%{public}d", strAutoStartStateKey.c_str(), ret);
provider.DeleteInstance();
return false;
}
HILOG_DEBUG("provider GetString = %{public}s, key = %{public}s.", strValue.c_str(), key.c_str());
HILOG_DEBUG("provider GetString = %{public}s, key = %{public}s.", strValue.c_str(), strAutoStartStateKey.c_str());
if (!std::strcmp(strValue.c_str(), "on")) {
provider.DeleteInstance();
return true;
@ -721,8 +731,8 @@ void AccessibilityAccountData::UpdateAutoStartEnabledAbilities()
for (auto &installAbility : installedAbilities_) {
std::string bundleName = installAbility.GetPackageName();
std::string abilityName = installAbility.GetName();
std::string strAutoStartStateKey = Utils::GetAbilityAutoStartStateKey(bundleName, abilityName, id_);
if (GetAbilityAutoStartState(strAutoStartStateKey)) {
std::string abilityId = bundleName + "/" + abilityName;
if (GetAbilityAutoStartState(abilityId)) {
HILOG_INFO("auto start packageName is %{public}s.", bundleName.c_str());
uint32_t capabilities = CAPABILITY_GESTURE | CAPABILITY_KEY_EVENT_OBSERVER | CAPABILITY_RETRIEVE |
CAPABILITY_TOUCH_GUIDE | CAPABILITY_ZOOM;
@ -863,9 +873,8 @@ void AccessibilityAccountData::AddAbility(const std::string &bundleName)
std::shared_ptr<AccessibilityAbilityInfo> accessibilityInfo =
std::make_shared<AccessibilityAbilityInfo>(initParams);
std::string tmpAbilityName = accessibilityInfo->GetName();
std::string strAutoStartStateKey = Utils::GetAbilityAutoStartStateKey(bundleName, tmpAbilityName, id_);
if (GetAbilityAutoStartState(strAutoStartStateKey)) {
std::string abilityId = accessibilityInfo->GetId();
if (GetAbilityAutoStartState(abilityId)) {
HILOG_DEBUG("auto start packageName is %{public}s.", bundleName.c_str());
uint32_t capabilities = CAPABILITY_GESTURE | CAPABILITY_KEY_EVENT_OBSERVER | CAPABILITY_RETRIEVE |
CAPABILITY_TOUCH_GUIDE | CAPABILITY_ZOOM;
@ -873,7 +882,7 @@ void AccessibilityAccountData::AddAbility(const std::string &bundleName)
accessibilityInfo->SetCapabilityValues(resultCapabilities);
AddInstalledAbility(*accessibilityInfo);
hasNewExtensionAbility = true;
std::string uri = Utils::GetUri(bundleName, tmpAbilityName);
std::string uri = Utils::GetUri(bundleName, accessibilityInfo->GetName());
AddEnabledAbility(uri);
RemoveConnectingA11yAbility(uri);
continue;
@ -903,8 +912,7 @@ void AccessibilityAccountData::ChangeAbility(const std::string &bundleName)
if (ability.GetPackageName() != bundleName) {
continue;
}
std::string strKey = ability.GetId() + "/" + std::to_string(id_);
if (GetAbilityAutoStartState(strKey)) {
if (GetAbilityAutoStartState(ability.GetId())) {
autoStartAbilities.push_back(ability.GetId());
}
}
@ -968,6 +976,17 @@ void AccessibilityAccountData::RemoveUITestClient(sptr<AccessibleAbilityConnecti
connection->OnAbilityDisconnectDoneSync(connection->GetElementName());
}
AccountSA::OsAccountType AccessibilityAccountData::GetAccountType()
{
if (accountType_ == AccountSA::OsAccountType::END) {
ErrCode rtn = AccountSA::OsAccountManager::GetOsAccountType(id_, accountType_);
if (rtn != ERR_OK) {
HILOG_ERROR("get account type failed for accountId [%{public}d]", id_);
}
}
return accountType_;
}
void AccessibilityAccountData::AccessibilityAbility::AddAccessibilityAbility(const std::string& uri,
const sptr<AccessibleAbilityConnection>& connection)
{

View File

@ -1274,8 +1274,7 @@ void AccessibleAbilityManagerService::PackageAdd(const std::string &bundleName)
return;
}
for (auto &abilityId : removedAutoStartAbilities_) {
std::string strKey = abilityId + "/" + std::to_string(packageAccount->GetAccountId());
if (packageAccount->GetAbilityAutoStartState(strKey)) {
if (packageAccount->GetAbilityAutoStartState(abilityId)) {
packageAccount->SetAbilityAutoStartState(abilityId, false);
}
}
@ -1521,8 +1520,7 @@ void AccessibleAbilityManagerService::UpdateAutoStartAbilities()
return;
}
for (auto &abilityId : removedAutoStartAbilities_) {
std::string strKey = abilityId + "/" + std::to_string(accountData->GetAccountId());
if (accountData->GetAbilityAutoStartState(strKey)) {
if (accountData->GetAbilityAutoStartState(abilityId)) {
accountData->SetAbilityAutoStartState(abilityId, false);
}
}

View File

@ -1395,5 +1395,20 @@ HWTEST_F(AccessibilityAccountDataTest, AccessibilityAccountData_Unittest_AddAcce
GTEST_LOG_(INFO) << "AccessibilityAccountData_Unittest_AddAccessibilityAbility_001 end";
}
/**
* @tc.number: AccessibilityAccountData_Unittest_SetAbilityAutoStartState_001
* @tc.name: SetAbilityAutoStartState
* @tc.desc: Check set and get AbilityAutoStartState.
*/
HWTEST_F(AccessibilityAccountDataTest, AccessibilityAccountData_Unittest_SetAbilityAutoStartState, TestSize.Level1)
{
GTEST_LOG_(INFO) << "AccessibilityAccountData_Unittest_SetAbilityAutoStartState_001 start";
const int32_t accountId = 1;
const std::string abilityName = "test";
sptr<AccessibilityAccountData> accountData = new AccessibilityAccountData(accountId);
accountData->SetAbilityAutoStartState(abilityName, false);
EXPECT_EQ(accountData->GetAbilityAutoStartState(abilityName), false);
GTEST_LOG_(INFO) << "AccessibilityAccountData_Unittest_SetAbilityAutoStartState_001 end";
}
} // namespace Accessibility
} // namespace OHOS
} // namespace OHOS