切换用户后没有通知ace state变化

Signed-off-by: Mupceet <laiguizhong@huawei.com>
This commit is contained in:
Mupceet
2022-11-03 14:44:38 +08:00
parent 3ab6c151d1
commit a6298c8777
7 changed files with 24 additions and 123 deletions
@@ -76,18 +76,6 @@ public:
*/
void RemoveConnectingA11yAbility(const std::string &uri);
/**
* @brief Add accessibility monitoring connection.
* @param callback Accessibility monitoring connection.
*/
void AddStateCallback(const sptr<IAccessibleAbilityManagerStateObserver>& callback);
/**
* @brief Remove accessibility monitoring connection.
* @param callback Accessibility monitoring connection.
*/
void RemoveStateCallback(const wptr<IRemoteObject>& callback);
void AddCaptionPropertyCallback(const sptr<IAccessibleAbilityManagerCaptionObserver>& callback);
void RemoveCaptionPropertyCallback(const wptr<IRemoteObject>& callback);
@@ -145,12 +133,6 @@ public:
*/
const std::map<std::string, sptr<AccessibleAbilityConnection>> GetConnectedA11yAbilities();
/**
* @brief Get accessibility listening connection list.
* @return Store vector of accessibility listening connection.
*/
const std::vector<sptr<IAccessibleAbilityManagerStateObserver>> &GetStateCallbacks() const;
const CaptionPropertyCallbacks GetCaptionPropertyCallbacks();
/**
@@ -308,7 +290,6 @@ private:
uint32_t connectCounter_ = 1;
std::map<std::string, sptr<AccessibleAbilityConnection>> connectedA11yAbilities_; // key: bundleName/abilityName
std::map<std::string, sptr<AccessibleAbilityConnection>> connectingA11yAbilities_; // key: bundleName/abilityName
std::vector<sptr<IAccessibleAbilityManagerStateObserver>> stateCallbacks_;
std::vector<sptr<IAccessibilityEnableAbilityListsObserver>> enableAbilityListsObservers_;
std::map<int32_t, sptr<AccessibilityWindowConnection>> asacConnections_; // key: windowId
CaptionPropertyCallbacks captionPropertyCallbacks_;
@@ -285,6 +285,7 @@ private:
sptr<IRemoteObject::DeathRecipient> enableAbilityListsObserverDeathRecipient_ = nullptr;
sptr<IRemoteObject::DeathRecipient> configCallbackDeathRecipient_ = nullptr;
sptr<IRemoteObject::DeathRecipient> bundleManagerDeathRecipient_ = nullptr;
std::vector<sptr<IAccessibleAbilityManagerStateObserver>> stateCallbacks_;
};
} // namespace Accessibility
} // namespace OHOS
@@ -113,23 +113,6 @@ void AccessibilityAccountData::RemoveConnectedAbility(const AppExecFwk::ElementN
HILOG_INFO("Remove ConnectedAbility: %{public}zu", connectedA11yAbilities_.size());
}
void AccessibilityAccountData::AddStateCallback(const sptr<IAccessibleAbilityManagerStateObserver>& callback)
{
HILOG_INFO();
stateCallbacks_.push_back(callback);
}
void AccessibilityAccountData::RemoveStateCallback(const wptr<IRemoteObject>& callback)
{
HILOG_INFO();
for (auto itr = stateCallbacks_.begin(); itr != stateCallbacks_.end(); itr++) {
if ((*itr)->AsObject() == callback) {
stateCallbacks_.erase(itr);
break;
}
}
}
void AccessibilityAccountData::AddCaptionPropertyCallback(
const sptr<IAccessibleAbilityManagerCaptionObserver>& callback)
{
@@ -331,12 +314,6 @@ const std::map<std::string, sptr<AccessibleAbilityConnection>> AccessibilityAcco
return connectedA11yAbilities_;
}
const std::vector<sptr<IAccessibleAbilityManagerStateObserver>> &AccessibilityAccountData::GetStateCallbacks() const
{
HILOG_DEBUG("start.");
return stateCallbacks_;
}
const std::map<int32_t, sptr<AccessibilityWindowConnection>> AccessibilityAccountData::GetAsacConnections()
{
HILOG_DEBUG("start.");
@@ -110,6 +110,7 @@ void AccessibleAbilityManagerService::OnStop()
currentAccountId_ = -1;
a11yAccountsData_.clear();
stateCallbacks_.clear();
bundleManager_ = nullptr;
inputInterceptor_ = nullptr;
touchEventInjector_ = nullptr;
@@ -253,8 +254,7 @@ uint32_t AccessibleAbilityManagerService::RegisterStateObserver(
{
HILOG_DEBUG();
if (!callback || !handler_) {
HILOG_ERROR("Parameters check failed! callback:%{public}p, handler:%{public}p",
callback.GetRefPtr(), handler_.get());
HILOG_ERROR("Parameters check failed!");
return 0;
}
@@ -262,13 +262,6 @@ uint32_t AccessibleAbilityManagerService::RegisterStateObserver(
std::future syncFuture = syncPromise.get_future();
handler_->PostTask(std::bind([this, &syncPromise, callback]() -> void {
HILOG_DEBUG();
sptr<AccessibilityAccountData> accountData = GetCurrentAccountData();
if (!accountData) {
HILOG_ERROR("Account data is null");
syncPromise.set_value(0);
return;
}
if (!stateCallbackDeathRecipient_) {
stateCallbackDeathRecipient_ = new(std::nothrow) StateCallbackDeathRecipient();
if (!stateCallbackDeathRecipient_) {
@@ -283,10 +276,18 @@ uint32_t AccessibleAbilityManagerService::RegisterStateObserver(
return;
}
callback->AsObject()->AddDeathRecipient(stateCallbackDeathRecipient_);
accountData->AddStateCallback(callback);
HILOG_INFO("AccessibleAbilityManagerService::RegisterStateObserver successfully");
auto iter = std::find(stateCallbacks_.begin(), stateCallbacks_.end(), callback);
if (iter == stateCallbacks_.end()) {
stateCallbacks_.push_back(callback);
HILOG_INFO("RegisterStateObserver successfully");
}
sptr<AccessibilityAccountData> accountData = GetCurrentAccountData();
if (!accountData) {
HILOG_ERROR("Account data is null");
syncPromise.set_value(0);
return;
}
uint32_t state = accountData->GetAccessibilityState();
syncPromise.set_value(state);
}), "TASK_REGISTER_STATE_OBSERVER");
@@ -1193,7 +1194,7 @@ void AccessibleAbilityManagerService::UpdateAccessibilityState()
if (!(state & STATE_ACCESSIBILITY_ENABLED)) {
Singleton<AccessibilityWindowManager>::GetInstance().ClearAccessibilityFocused();
}
for (auto &callback : accountData->GetStateCallbacks()) {
for (auto &callback : stateCallbacks_) {
if (callback) {
callback->OnStateChanged(state);
}
@@ -2131,7 +2132,15 @@ void AccessibleAbilityManagerService::RemoveCallback(CallBackID callback,
}
switch (callback) {
case STATE_CALLBACK:
accountData->RemoveStateCallback(remote);
{
auto iter = std::find_if(stateCallbacks_.begin(), stateCallbacks_.end(),
[remote](const sptr<IAccessibleAbilityManagerStateObserver> &stateCallback) {
return stateCallback->AsObject() == remote;
});
if (iter != stateCallbacks_.end()) {
stateCallbacks_.erase(iter);
}
}
break;
case CAPTION_PROPERTY_CALLBACK:
accountData->RemoveCaptionPropertyCallback(remote);
@@ -31,8 +31,6 @@ public:
MOCK_METHOD1(AddConnectedAbility, void(sptr<AccessibleAbilityConnection>& connection));
MOCK_METHOD1(RemoveConnectedAbility, void(const AppExecFwk::ElementName &element));
MOCK_METHOD1(RemoveConnectingA11yAbility, void(const std::string &uri));
MOCK_METHOD1(AddStateCallback, void(const sptr<AccessibleAbilityManagerServiceStub>& callback));
MOCK_METHOD1(RemoveStateCallback, void(const wptr<IRemoteObject>& callback));
MOCK_METHOD1(AddCaptionPropertyCallback, void(const sptr<IAccessibleAbilityManagerCaptionObserver>& callback));
MOCK_METHOD1(RemoveCaptionPropertyCallback, void(const wptr<IRemoteObject>& callback));
MOCK_METHOD2(AddAccessibilityWindowConnection,
@@ -45,7 +43,6 @@ public:
MOCK_METHOD1(RemoveInstalledAbility, void(const std::string &bundleName));
MOCK_METHOD0(ClearInstalledAbility, void());
MOCK_METHOD0(GetConnectedA11yAbilities, const std::map<std::string, sptr<AccessibleAbilityConnection>>());
MOCK_METHOD0(GetStateCallbacks, const std::vector<sptr<IAccessibleAbilityManagerStateObserver>> &());
MOCK_METHOD0(GetCaptionPropertyCallbacks, const CaptionPropertyCallbacks());
MOCK_METHOD0(GetAsacConnections, const std::map<int32_t, sptr<AccessibilityWindowConnection>>());
MOCK_METHOD1(
@@ -89,19 +89,6 @@ void AccessibilityAccountData::RemoveConnectedAbility(const AppExecFwk::ElementN
HILOG_INFO("Remove ConnectedAbility: %{public}zu", connectedA11yAbilities_.size());
}
void AccessibilityAccountData::AddStateCallback(const sptr<IAccessibleAbilityManagerStateObserver>& callback)
{
HILOG_DEBUG("start.");
stateCallbacks_.push_back(callback);
}
// remove IAccessibleAbilityManagerServiceState
void AccessibilityAccountData::RemoveStateCallback(const wptr<IRemoteObject>& callback)
{
(void)callback;
HILOG_DEBUG("start.");
}
void AccessibilityAccountData::AddCaptionPropertyCallback(
const sptr<IAccessibleAbilityManagerCaptionObserver>& callback)
{
@@ -219,12 +206,6 @@ const std::map<std::string, sptr<AccessibleAbilityConnection>> AccessibilityAcco
return connectedA11yAbilities_;
}
const std::vector<sptr<IAccessibleAbilityManagerStateObserver>> &AccessibilityAccountData::GetStateCallbacks() const
{
HILOG_DEBUG("start.");
return stateCallbacks_;
}
const std::map<int32_t, sptr<AccessibilityWindowConnection>> AccessibilityAccountData::GetAsacConnections()
{
HILOG_DEBUG("start.");
@@ -505,29 +505,6 @@ HWTEST_F(AccessibilityAccountDataTest, AccessibilityAccountData_Unittest_GetConn
GTEST_LOG_(INFO) << "AccessibilityAccountData_Unittest_GetConnectedA11yAbilities001 end";
}
/**
* @tc.number: AccessibilityAccountData_Unittest_GetStateCallbacks001
* @tc.name: GetStateCallbacks
* @tc.desc: Check the get state callbacks.
*/
HWTEST_F(AccessibilityAccountDataTest, AccessibilityAccountData_Unittest_GetStateCallbacks001, TestSize.Level1)
{
GTEST_LOG_(INFO) << "AccessibilityAccountData_Unittest_GetStateCallbacks001 start";
const int32_t accountId = 1;
sptr<AccessibilityAccountData> accountData = new AccessibilityAccountData(accountId);
sptr<AccessibleAbilityManagerStateObserverStub> stub = new MockAccessibleAbilityManagerStateObserverStub();
const sptr<IAccessibleAbilityManagerStateObserver> state = new MockAccessibleAbilityManagerStateObserverProxy(stub);
/* get */
size_t size = accountData->GetStateCallbacks().size();
EXPECT_EQ(0, size);
/* add */
accountData->AddStateCallback(state);
/* get */
EXPECT_EQ(1, accountData->GetStateCallbacks().size());
GTEST_LOG_(INFO) << "AccessibilityAccountData_Unittest_GetStateCallbacks001 end";
}
/**
* @tc.number: AccessibilityAccountData_Unittest_GetAsacConnections001
* @tc.name: GetAsacConnections
@@ -1334,28 +1311,6 @@ HWTEST_F(AccessibilityAccountDataTest, AccessibilityAccountData_Unittest_RemoveU
GTEST_LOG_(INFO) << "AccessibilityAccountData_Unittest_RemoveUITestClient_002 end";
}
/**
* @tc.number: AccessibilityAccountData_Unittest_RemoveStateCallback
* @tc.name: RemoveStateCallback
* @tc.desc: Check the function of RemoveStateCallback.
*/
HWTEST_F(AccessibilityAccountDataTest, AccessibilityAccountData_Unittest_RemoveStateCallback, TestSize.Level1)
{
GTEST_LOG_(INFO) << "AccessibilityAccountData_Unittest_RemoveStateCallback start";
sptr<AccessibilityAccountData> accountData = new AccessibilityAccountData(0);
sptr<AccessibleAbilityManagerStateObserverStub> stub = new MockAccessibleAbilityManagerStateObserverStub();
sptr<IAccessibleAbilityManagerStateObserver> state = new MockAccessibleAbilityManagerStateObserverProxy(stub);
EXPECT_EQ(0, static_cast<int>(accountData->GetStateCallbacks().size()));
accountData->AddStateCallback(state);
EXPECT_EQ(1, static_cast<int>(accountData->GetStateCallbacks().size()));
accountData->RemoveStateCallback(state->AsObject());
EXPECT_EQ(0, static_cast<int>(accountData->GetStateCallbacks().size()));
GTEST_LOG_(INFO) << "AccessibilityAccountData_Unittest_RemoveStateCallback end";
}
/**
* @tc.number: AccessibilityAccountData_Unittest_CaptionPropertyCallback
* @tc.name: CaptionPropertyCallback