}
void Complication::Impl::OnVanish(const std::string& name) {
- auto sender_info = sender_info_.find(name);
- auto si = sender_info->second;
-
- if (sender_info == sender_info_.end())
- return;
-
- gdbus_.get()->UnWatch(si);
- sender_info_.erase(name);
+ LOGI("OnVanish %s", name.c_str());
}
void Complication::Impl::OnAppear(const std::string& name,
const std::string& name_owner) {
+ LOGI("OnAppear %s ", name.c_str());
+ parent_->SendDataUpdateRequest(false);
}
bool Complication::Impl::IsValidSender(GDBusConnection* connection,
const std::string& sender_name) {
+ static std::string prev_sender_name;
+ if (prev_sender_name.compare(sender_name) == 0)
+ return true;
+
std::string sender_appid = util::GetSenderAppid(connection, sender_name);
if (sender_appid.empty()) {
LOGI("invalid sender_appid");
return false;
}
- std::string provider_appid =
- DBManager::GetProviderAppId(cur_provider_id_.c_str());
- if (provider_appid.empty()) {
- LOGI("invalid provider_appid");
- return false;
- }
-
- if (provider_appid.compare(sender_appid) != 0) {
+ if (cur_provider_appid_.compare(sender_appid) != 0) {
LOGI("invalid sender_appid %s", sender_appid.c_str());
return false;
}
- int watcher_id = gdbus_.get()->Watch(sender_appid, this);
- sender_info_[sender_name] = watcher_id;
-
+ prev_sender_name = sender_name;
return true;
}
GVariant* parameters) {
LOGI("signal_name: %s , %s ", signal_name.c_str(), sender_name.c_str());
- auto sender_info = sender_info_.find(sender_name);
- if (sender_info == sender_info_.end() &&
- !IsValidSender(connection, sender_name))
+ if (IsValidSender(connection, sender_name) == false)
return;
if (signal_name.compare(util::GetCmdStr(util::CompUpdated)) == 0) {
if (ret != WATCHFACE_COMPLICATION_ERROR_NONE)
return ret;
- gdbus_.get()->UnSubscribeSignal(subscribe_id_);
+ if (watcher_id_ > 0)
+ gdbus_.get()->UnWatch(watcher_id_);
+ if (cur_type_ == NoData)
+ watcher_id_ = 0;
+ else
+ watcher_id_ = gdbus_.get()->Watch(cur_provider_appid_, this);
+
+ if (subscribe_id_ > 0)
+ gdbus_.get()->UnSubscribeSignal(subscribe_id_);
if (cur_type_ == NoData) {
subscribe_id_ = 0;
} else {
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
-int Complication::SendDataUpdateRequest() {
+int Complication::SendDataUpdateRequest(bool launch_option) {
LOGI("emit signal comp_id %d, type %d",
impl_->complication_id_, impl_->cur_type_);
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
- ret = aul_complication_update_request(
- util::GetAppId().c_str(),
- provider_appid.c_str(), getuid());
- LOGI("Launch the provider app: %d, %s", ret, provider_appid.c_str());
-
- if (ret != AUL_R_OK) {
- if (ret == AUL_R_EILLACC)
- return WATCHFACE_COMPLICATION_ERROR_PERMISSION_DENIED;
- else if (ret == AUL_R_EINVAL)
- return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
- else
- return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
+ if (launch_option) {
+ ret = aul_complication_update_request(
+ util::GetAppId().c_str(),
+ provider_appid.c_str(), getuid());
+ LOGI("Launch the provider app: %d, %s", ret, provider_appid.c_str());
+
+ if (ret != AUL_R_OK) {
+ if (ret == AUL_R_EILLACC)
+ return WATCHFACE_COMPLICATION_ERROR_PERMISSION_DENIED;
+ else if (ret == AUL_R_EINVAL)
+ return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+ else
+ return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
+ }
}
if (impl_->context_data_ != nullptr)