fix get focus

Signed-off-by: Mupceet <laiguizhong@huawei.com>
This commit is contained in:
Mupceet
2022-11-10 09:38:01 +08:00
parent 054efd4210
commit 1e80cedeac
2 changed files with 26 additions and 3 deletions
@@ -165,6 +165,7 @@ private:
int32_t GenerateRequestId();
int32_t channelId_ = INVALID_CHANNEL_ID;
int32_t accessibilityFocusedWindowId_ = INVALID_WINDOW_ID;
sptr<IAccessibleAbilityChannel> proxy_ = nullptr;
std::atomic<int> requestId_ = 0;
};
@@ -70,14 +70,21 @@ RetError AccessibleAbilityChannelClient::FindFocusedElementInfo(int32_t accessib
}
std::future<void> promiseFuture = elementOperator->promise_.get_future();
RetError ret = proxy_->FindFocusedElementInfo(accessibilityWindowId,
int32_t windowId = accessibilityWindowId;
if (accessibilityWindowId == ANY_WINDOW_ID && focusType == FOCUS_TYPE_ACCESSIBILITY &&
accessibilityFocusedWindowId_ != INVALID_WINDOW_ID) {
windowId = accessibilityFocusedWindowId_;
HILOG_INFO("Convert into accessibility focused window id[%{public}d]", windowId);
}
RetError ret = proxy_->FindFocusedElementInfo(windowId,
elementId, focusType, requestId, elementOperator);
if (ret != RET_OK) {
HILOG_ERROR("FindFocusedElementInfo failed. ret[%{public}d]", ret);
return ret;
}
HILOG_DEBUG("channelId:%{public}d, accessibilityWindowId:%{public}d, elementId:%{public}d, focusType:%{public}d",
channelId_, accessibilityWindowId, elementId, focusType);
HILOG_DEBUG("channelId:%{public}d, windowId:%{public}d, elementId:%{public}d, focusType:%{public}d",
channelId_, windowId, elementId, focusType);
std::future_status wait = promiseFuture.wait_for(std::chrono::milliseconds(TIME_OUT_OPERATOR));
if (wait != std::future_status::ready) {
@@ -141,6 +148,21 @@ RetError AccessibleAbilityChannelClient::ExecuteAction(int32_t accessibilityWind
}
HILOG_INFO("Get result successfully from ace. executeActionResult_[%{public}d]",
elementOperator->executeActionResult_);
if (elementOperator->executeActionResult_) {
switch (action) {
case ActionType::ACCESSIBILITY_ACTION_ACCESSIBILITY_FOCUS:
accessibilityFocusedWindowId_ = accessibilityWindowId;
HILOG_INFO("Set accessibility focused window id[%{public}d]", accessibilityFocusedWindowId_);
break;
case ActionType::ACCESSIBILITY_ACTION_CLEAR_ACCESSIBILITY_FOCUS:
accessibilityFocusedWindowId_ = INVALID_WINDOW_ID;
HILOG_INFO("Clear accessibility focused window id");
break;
default:
break;
}
}
return elementOperator->executeActionResult_ ? RET_OK : RET_ERR_PERFORM_ACTION_FAILED_BY_ACE;
}