diff --git a/OAT.xml b/OAT.xml
index 96b39662a64dc3b78a7dd784ee9ea8bb2effc280..d4ec02817f580dfb0507ccf12901279d6a74d7df 100644
--- a/OAT.xml
+++ b/OAT.xml
@@ -62,7 +62,9 @@ Note:If the text contains special characters, please escape them according to th
-
+
+
+
diff --git a/bundle.json b/bundle.json
index b0357886a0f337a6e44c20b3910c2c7e3b77365b..7eeed0eb69d6aa39c5f3428bf365f65dac8f3bcf 100644
--- a/bundle.json
+++ b/bundle.json
@@ -24,7 +24,6 @@
"appspawn",
"bytrace_standard",
"ces_standard",
- "ces_standard",
"device_manager_base",
"distributeddatamgr_appdatamgr",
"distributedschedule_dms_fwk",
@@ -59,47 +58,30 @@
"//foundation/aafwk/standard/sa_profile:aafwk_sa_profile",
"//foundation/aafwk/standard/interfaces/kits/napi:napi_packages",
"//foundation/aafwk/standard/frameworks/kits/ability/ability_runtime:ability_context_native",
+ "//foundation/aafwk/standard/common:common_target",
"//foundation/aafwk/standard/frameworks/kits/appkit:app_context",
"//foundation/aafwk/standard/frameworks/kits/appkit:appkit_native",
- "//foundation/aafwk/standard/frameworks/kits/appkit:appexec"
+ "//foundation/aafwk/standard/frameworks/kits/appkit:appexec",
+ "//foundation/aafwk/standard/frameworks/kits/wantagent:wantagent_innerkits"
],
"inner_kits": [
{
"header": {
- "header_base": "//foundation/aafwk/standard/interfaces/innerkits/base/include/",
- "header_files": [
- "ohos/aafwk/base/array_wrapper.h",
- "ohos/aafwk/base/base_def.h",
- "ohos/aafwk/base/base_interfaces.h",
- "ohos/aafwk/base/base_object.h",
- "ohos/aafwk/base/base_types.h",
- "ohos/aafwk/base/bool_wrapper.h",
- "ohos/aafwk/base/byte_wrapper.h",
- "ohos/aafwk/base/double_wrapper.h",
- "ohos/aafwk/base/float_wrapper.h",
- "ohos/aafwk/base/int_wrapper.h",
- "ohos/aafwk/base/light_refbase.h",
- "ohos/aafwk/base/long_wrapper.h",
- "ohos/aafwk/base/short_wrapper.h",
- "ohos/aafwk/base/string_wrapper.h"
- ]
- },
- "name": "//foundation/aafwk/standard/interfaces/innerkits/base:base"
- },
- {
- "header": {
- "header_base": "//foundation/aafwk/standard/interfaces/innerkits/want/include/",
+ "header_base": "//foundation/aafwk/standard/interfaces/innerkits/wantagent/include/",
"header_files": [
- "ohos/aafwk/content/want.h",
- "ohos/aafwk/content/skills.h",
- "ohos/aafwk/content/want_params.h",
- "ohos/aafwk/content/match_type.h",
- "ohos/aafwk/content/operation.h",
- "ohos/aafwk/content/patterns_matcher.h",
- "ohos/aafwk/content/pac_map.h"
+ "cancel_listener.h",
+ "completed_callback.h",
+ "completed_dispatcher.h",
+ "pending_want.h",
+ "trigger_info.h",
+ "want_agent_constant.h",
+ "want_agent_helper.h",
+ "want_agent_info.h",
+ "want_agent_log_wrapper.h",
+ "want_agent.h"
]
},
- "name": "//foundation/aafwk/standard/interfaces/innerkits/want:want"
+ "name": "//foundation/aafwk/standard/frameworks/kits/wantagent:wantagent_innerkits"
},
{
"header": {
@@ -197,6 +179,7 @@
"test": [
"//foundation/aafwk/standard/frameworks/kits/content/cpp/test:unittest",
"//foundation/aafwk/standard/frameworks/kits/ability/native/test:unittest",
+ "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/dataShare/test:unittest",
"//foundation/aafwk/standard/frameworks/kits/ability/ability_runtime/test:moduletest",
"//foundation/aafwk/standard/frameworks/kits/test:moduletest",
"//foundation/aafwk/standard/services/test:moduletest",
@@ -205,8 +188,9 @@
"//foundation/aafwk/standard/common/test:moduletest",
"//foundation/aafwk/standard/frameworks/kits/appkit/native/test:unittest",
"//foundation/aafwk/standard/frameworks/kits/appkit/test:moduletest",
+ "//foundation/aafwk/standard/frameworks/kits/wantagent/test/:unittest",
"//foundation/aafwk/standard/services/appmgr/test:unittest"
]
}
}
-}
\ No newline at end of file
+}
diff --git a/frameworks/kits/ability/ability_runtime/BUILD.gn b/frameworks/kits/ability/ability_runtime/BUILD.gn
old mode 100644
new mode 100755
index 8926749f510e9fb05c1f2b57416768bf36efc28d..df3fc506d82ba6271f02811e83ef7c43570351f2
--- a/frameworks/kits/ability/ability_runtime/BUILD.gn
+++ b/frameworks/kits/ability/ability_runtime/BUILD.gn
@@ -22,6 +22,7 @@ config("ability_context_public_config") {
"${SO_DIR}/include",
"${APPKIT_DIR}/appkit/native/ability_runtime",
"${APPKIT_DIR}/appkit/native/ability_runtime/context",
+ "//base/hiviewdfx/hichecker/interfaces/native/innerkits/include",
]
cflags = []
@@ -46,6 +47,7 @@ ohos_shared_library("ability_context_native") {
"${APPKIT_DIR}/appkit:app_context",
"${INNERKITS_DIR}/ability_manager:ability_manager",
"${INNERKITS_DIR}/want:want",
+ "//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher:lib_dfx_dump_catcher",
"//foundation/ace/napi:ace_napi",
"//foundation/appexecfwk/standard/interfaces/innerkits/appexecfwk_base:appexecfwk_base",
]
@@ -54,6 +56,7 @@ ohos_shared_library("ability_context_native") {
"ability_runtime:app_manager",
"ability_runtime:runtime",
"bytrace_standard:bytrace_core",
+ "hichecker_native:libhichecker",
"hiviewdfx_hilog_native:libhilog",
"ipc:ipc_core",
"utils_base:utils",
diff --git a/frameworks/kits/ability/ability_runtime/include/ability_context.h b/frameworks/kits/ability/ability_runtime/include/ability_context.h
index 1f4e4d8af369c54dc9fdadd3c5da34330015b86d..570dc6319c7fad29ea3ef792bcc4a891779d8830 100644
--- a/frameworks/kits/ability/ability_runtime/include/ability_context.h
+++ b/frameworks/kits/ability/ability_runtime/include/ability_context.h
@@ -32,6 +32,7 @@ namespace OHOS {
namespace AbilityRuntime {
using RuntimeTask = std::function;
using PermissionRequestTask = std::function&, const std::vector&)>;
+class LocalCallContainer;
class AbilityContext : public Context {
public:
virtual ~AbilityContext() = default;
@@ -165,6 +166,8 @@ public:
virtual ErrCode TerminateSelf() = 0;
+ virtual ErrCode CloseAbility() = 0;
+
/**
* @brief Requests certain permissions from the system.
* This method is called for permission request. This is an asynchronous method. When it is executed,
@@ -227,9 +230,14 @@ public:
*/
virtual ErrCode SetMissionLabel(const std::string &label) = 0;
- virtual void SetConfiguration(const std::shared_ptr &config) = 0;
+ /**
+ * @brief Get LocalCallContainer.
+ *
+ * @return Returns the LocalCallContainer.
+ */
+ virtual sptr GetLocalCallContainer() = 0;
- virtual std::shared_ptr GetConfiguration() const = 0;
+ virtual void SetConfiguration(const std::shared_ptr &config) = 0;
virtual void RegisterAbilityCallback(std::weak_ptr abilityCallback) = 0;
diff --git a/frameworks/kits/ability/ability_runtime/include/ability_context_impl.h b/frameworks/kits/ability/ability_runtime/include/ability_context_impl.h
index c240fa64c418957608b18ecc75e8526306404b0d..a648d32b426f41b13367c6466e5b6447cff7f4f1 100644
--- a/frameworks/kits/ability/ability_runtime/include/ability_context_impl.h
+++ b/frameworks/kits/ability/ability_runtime/include/ability_context_impl.h
@@ -69,6 +69,8 @@ public:
ErrCode TerminateSelf() override;
+ ErrCode CloseAbility() override;
+
sptr GetToken() override;
void RequestPermissionsFromUser(const std::vector &permissions,
@@ -115,6 +117,16 @@ public:
return contentStorage_;
}
+ /**
+ * @brief Get LocalCallContainer.
+ *
+ * @return Returns the LocalCallContainer.
+ */
+ sptr GetLocalCallContainer() override
+ {
+ return localCallContainer_;
+ }
+
void SetConfiguration(const std::shared_ptr &config) override;
std::shared_ptr GetConfiguration() const override;
diff --git a/frameworks/kits/ability/ability_runtime/include/connection_manager.h b/frameworks/kits/ability/ability_runtime/include/connection_manager.h
index 21ea3c693a406e3ec03952f01a314c488947731b..878a48e51186dfb7c1d16a60fc0a9387ecc33bd9 100755
--- a/frameworks/kits/ability/ability_runtime/include/connection_manager.h
+++ b/frameworks/kits/ability/ability_runtime/include/connection_manager.h
@@ -122,6 +122,14 @@ public:
* @return Returns whether the ability connection of receiver is disconnect.
*/
bool DisconnectReceiver(const AppExecFwk::ElementName &connectReceiver);
+
+ /**
+ * @brief Report the ability connection leak event.
+ *
+ * @param pid The process id.
+ * @param tid The thread id.
+ */
+ void ReportConnectionLeakEvent(const int pid, const int tid);
private:
ConnectionManager() = default;
bool IsConnectCallerEqual(const sptr &connectCaller, const sptr &connectCallerOther);
diff --git a/frameworks/kits/ability/ability_runtime/include/js_extension_context.h b/frameworks/kits/ability/ability_runtime/include/js_extension_context.h
index 9a3e868cec84c880ca02015b77131ec25f8149bf..3681dfd5d589b655c894cd0bdb7dee78f78f8157 100644
--- a/frameworks/kits/ability/ability_runtime/include/js_extension_context.h
+++ b/frameworks/kits/ability/ability_runtime/include/js_extension_context.h
@@ -21,10 +21,23 @@
#include "extension_context.h"
class NativeEngine;
+class NativeReference;
class NativeValue;
namespace OHOS {
namespace AbilityRuntime {
+class JsExtensionContext final {
+public:
+ JsExtensionContext(const std::shared_ptr& context) : context_(context) {}
+ ~JsExtensionContext() = default;
+
+ static void ConfigurationUpdated(NativeEngine* engine, std::shared_ptr &jsContext,
+ const std::shared_ptr &config);
+
+private:
+ std::weak_ptr context_;
+};
+
NativeValue* CreateJsExtensionContext(NativeEngine& engine, std::shared_ptr context);
} // namespace AbilityRuntime
} // namespace OHOS
diff --git a/frameworks/kits/ability/ability_runtime/include/local_call_container.h b/frameworks/kits/ability/ability_runtime/include/local_call_container.h
index 02659ff295302c712ba07fc4dfcf80847ae09420..ecc2fbe4e44995d38e8fa119063fce4efd788a9f 100644
--- a/frameworks/kits/ability/ability_runtime/include/local_call_container.h
+++ b/frameworks/kits/ability/ability_runtime/include/local_call_container.h
@@ -45,6 +45,7 @@ public:
private:
bool GetCallLocalreocrd(
const AppExecFwk::ElementName &elementName, std::shared_ptr &localCallRecord);
+ void OnCallStubDied(const wptr &remote);
private:
std::map> callProxyRecords_;
diff --git a/frameworks/kits/ability/ability_runtime/include/local_call_record.h b/frameworks/kits/ability/ability_runtime/include/local_call_record.h
index 4fb8ae25b232867c3d264ea50c4aad35055ef91e..639a31d435d39d1aa600b9b54842e18c7eabcd39 100644
--- a/frameworks/kits/ability/ability_runtime/include/local_call_record.h
+++ b/frameworks/kits/ability/ability_runtime/include/local_call_record.h
@@ -32,6 +32,7 @@ public:
virtual ~LocalCallRecord();
void SetRemoteObject(const sptr &call);
+ void SetRemoteObject(const sptr &call, sptr callRecipient);
void AddCaller(const std::shared_ptr &callback);
bool RemoveCaller(const std::shared_ptr &callback);
void OnCallStubDied(const wptr &remote);
@@ -39,6 +40,9 @@ public:
void InvokeCallBack() const;
AppExecFwk::ElementName GetElementName() const;
bool IsExistCallBack() const;
+ int GetRecordId();
+ std::vector> GetCallers();
+ bool IsSameObject(const sptr &remote);
private:
static int64_t callRecordId;
diff --git a/frameworks/kits/ability/ability_runtime/src/ability_connection.cpp b/frameworks/kits/ability/ability_runtime/src/ability_connection.cpp
index a42fa5133f072267f4e678cde98a8df9d6fa85d6..d9ca5ee0f40495b9e69e83d8ce5fdb7b75ea5748 100755
--- a/frameworks/kits/ability/ability_runtime/src/ability_connection.cpp
+++ b/frameworks/kits/ability/ability_runtime/src/ability_connection.cpp
@@ -14,6 +14,9 @@
*/
#include "ability_connection.h"
+
+#include
+
#include "connection_manager.h"
#include "hilog_wrapper.h"
@@ -49,6 +52,7 @@ void AbilityConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName &e
if (resultCode == DIED) {
bool ret = ConnectionManager::GetInstance().DisconnectReceiver(element);
if (ret) {
+ ConnectionManager::GetInstance().ReportConnectionLeakEvent(getpid(), gettid());
HILOG_INFO("The service connection is not disconnected.");
}
abilityConnectCallback_->OnAbilityDisconnectDone(element, DIED + 1);
diff --git a/frameworks/kits/ability/ability_runtime/src/ability_context_impl.cpp b/frameworks/kits/ability/ability_runtime/src/ability_context_impl.cpp
index 8dbbd60696f33567f43b67a125fcd9953daf6abc..f66d7cdb33ca366e41ec92ed0d2fe6edb4398c54 100644
--- a/frameworks/kits/ability/ability_runtime/src/ability_context_impl.cpp
+++ b/frameworks/kits/ability/ability_runtime/src/ability_context_impl.cpp
@@ -164,8 +164,13 @@ ErrCode AbilityContextImpl::TerminateAbilityWithResult(const AAFwk::Want &want,
void AbilityContextImpl::OnAbilityResult(int requestCode, int resultCode, const AAFwk::Want &resultData)
{
HILOG_DEBUG("%{public}s. Start calling OnAbilityResult.", __func__);
- resultCallbacks_[requestCode](resultCode, resultData);
- resultCallbacks_.erase(requestCode);
+ auto callback = resultCallbacks_.find(requestCode);
+ if (callback != resultCallbacks_.end()) {
+ if (callback->second) {
+ callback->second(resultCode, resultData);
+ }
+ resultCallbacks_.erase(requestCode);
+ }
HILOG_INFO("%{public}s. End calling OnAbilityResult.", __func__);
}
@@ -278,6 +283,17 @@ ErrCode AbilityContextImpl::TerminateSelf()
return err;
}
+ErrCode AbilityContextImpl::CloseAbility()
+{
+ HILOG_DEBUG("%{public}s begin.", __func__);
+ AAFwk::Want resultWant;
+ ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->CloseAbility(token_, -1, &resultWant);
+ if (err != ERR_OK) {
+ HILOG_ERROR("CloseAbility failed: %{public}d", err);
+ }
+ return err;
+}
+
sptr AbilityContextImpl::GetToken()
{
return token_;
diff --git a/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp b/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp
index 6c35e04942128e71c41a8e54d53119796253c70d..288de043ecb46895157380550013023202db0d5b 100755
--- a/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp
+++ b/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp
@@ -17,10 +17,13 @@
#include "ability_connection.h"
#include "ability_context.h"
#include "ability_manager_client.h"
+#include "dfx_dump_catcher.h"
+#include "hichecker.h"
#include "hilog_wrapper.h"
namespace OHOS {
namespace AbilityRuntime {
+using namespace OHOS::HiviewDFX;
ConnectionManager& ConnectionManager::GetInstance()
{
static ConnectionManager connectionManager;
@@ -238,6 +241,26 @@ bool ConnectionManager::DisconnectReceiver(const AppExecFwk::ElementName &connec
return isDisconnect;
}
+void ConnectionManager::ReportConnectionLeakEvent(const int pid, const int tid)
+{
+ HILOG_DEBUG("%{public}s begin, pid:%{public}d, tid:%{public}d.", __func__, pid, tid);
+ if (HiChecker::Contains(Rule::RULE_CHECK_ABILITY_CONNECTION_LEAK)) {
+ DfxDumpCatcher dumplog;
+ std::string stackTrace;
+ bool ret = dumplog.DumpCatch(pid, tid, stackTrace);
+ if (ret) {
+ std::string cautionMsg = "TriggerRule:RULE_CHECK_ABILITY_CONNECTION_LEAK-pid=" +
+ std::to_string(pid) + "-tid=" + std::to_string(tid) + ", has leaked connection" +
+ ", Are you missing a call to DisconnectAbility()";
+ HILOG_DEBUG("%{public}s cautionMsg:%{public}s.", __func__, cautionMsg.c_str());
+ Caution caution(Rule::RULE_CHECK_ABILITY_CONNECTION_LEAK, cautionMsg, stackTrace);
+ HiChecker::NotifyAbilityConnectionLeak(caution);
+ } else {
+ HILOG_ERROR("%{public}s dumpCatch stackTrace failed.", __func__);
+ }
+ }
+}
+
bool ConnectionManager::IsConnectCallerEqual(const sptr &connectCaller,
const sptr &connectCallerOther)
{
diff --git a/frameworks/kits/ability/ability_runtime/src/js_extension_context.cpp b/frameworks/kits/ability/ability_runtime/src/js_extension_context.cpp
index a9cdf1dd4a633f6f1fd113d532ae80d705195797..8441812852d01299a31d8b95aea5e21c00a5b6a7 100644
--- a/frameworks/kits/ability/ability_runtime/src/js_extension_context.cpp
+++ b/frameworks/kits/ability/ability_runtime/src/js_extension_context.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Huawei Device Co., Ltd.
+ * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -19,15 +19,50 @@
#include "hilog_wrapper.h"
#include "js_context_utils.h"
+#include "js_data_struct_converter.h"
#include "js_runtime.h"
#include "js_runtime_utils.h"
namespace OHOS {
namespace AbilityRuntime {
+void JsExtensionContext::ConfigurationUpdated(NativeEngine* engine, std::shared_ptr &jsContext,
+ const std::shared_ptr &config)
+{
+ HILOG_INFO("%{public}s called.", __func__);
+ if ((!jsContext) || (!config)) {
+ HILOG_INFO("jsContext or config is nullptr.");
+ return;
+ }
+
+ NativeValue* value = jsContext->Get();
+ NativeObject* object = ConvertNativeValueTo(value);
+ if (!object) {
+ HILOG_INFO("object is nullptr.");
+ return;
+ }
+
+ NativeValue* method = object->GetProperty("onUpdateConfiguration");
+ if (!method) {
+ HILOG_ERROR("Failed to get onUpdateConfiguration from object");
+ return;
+ }
+
+ HILOG_INFO("JsExtensionContext call onUpdateConfiguration.");
+ NativeValue* argv[] = {CreateJsConfiguration(*engine, *config)};
+ engine->CallFunction(value, method, argv, 1);
+}
+
NativeValue* CreateJsExtensionContext(NativeEngine& engine, std::shared_ptr context)
{
HILOG_INFO("CreateJsExtensionContext begin");
NativeValue* objValue = CreateJsBaseContext(engine, context);
+ NativeObject* object = ConvertNativeValueTo(objValue);
+
+ auto configuration = context->GetConfiguration();
+ if (configuration) {
+ object->SetProperty("config", CreateJsConfiguration(engine, *configuration));
+ }
+
return objValue;
}
} // namespace AbilityRuntime
diff --git a/frameworks/kits/ability/ability_runtime/src/local_call_container.cpp b/frameworks/kits/ability/ability_runtime/src/local_call_container.cpp
index 13ed5205b1c666bd6775fc2628088cd028216297..55edc32bedaa6aa9e82ecedd917e2699062a866a 100644
--- a/frameworks/kits/ability/ability_runtime/src/local_call_container.cpp
+++ b/frameworks/kits/ability/ability_runtime/src/local_call_container.cpp
@@ -119,6 +119,31 @@ int LocalCallContainer::Release(const std::shared_ptr& callback)
void LocalCallContainer::DumpCalls(std::vector &info) const
{
HILOG_DEBUG("LocalCallContainer::DumpCalls called.");
+ info.emplace_back(" caller connections:");
+ for (auto iter = callProxyRecords_.begin(); iter != callProxyRecords_.end(); iter++) {
+ std::string tempstr = " LocalCallRecord";
+ tempstr += " ID #" + std::to_string (iter->second->GetRecordId()) + "\n";
+ tempstr += " callee";
+ tempstr += " uri[" + iter->first + "]" + "\n";
+ tempstr += " callers #" + std::to_string (iter->second->GetCallers().size());
+ bool flag = true;
+ for (auto &callBack:iter->second->GetCallers()) {
+ if (callBack && !callBack->IsCallBack()) {
+ HILOG_INFO("%{public}s call back is not called.", __func__);
+ flag = false;
+ break;
+ }
+ }
+ if (flag) {
+ HILOG_INFO("%{public}s state is REQUESTEND.", __func__);
+ tempstr += " state #REQUESTEND";
+ } else {
+ HILOG_INFO("%{public}s state is REQUESTING.", __func__);
+ tempstr += " state #REQUESTING";
+ }
+ info.emplace_back(tempstr);
+ }
+ return;
}
void LocalCallContainer::OnAbilityConnectDone(
@@ -130,7 +155,9 @@ void LocalCallContainer::OnAbilityConnectDone(
}
std::shared_ptr localCallRecord;
if (GetCallLocalreocrd(element, localCallRecord)) {
- localCallRecord->SetRemoteObject(remoteObject);
+ auto callRecipient = new (std::nothrow) CallRecipient(
+ std::bind(&LocalCallContainer::OnCallStubDied, this, std::placeholders::_1));
+ localCallRecord->SetRemoteObject(remoteObject, callRecipient);
}
if (localCallRecord) {
@@ -138,7 +165,6 @@ void LocalCallContainer::OnAbilityConnectDone(
}
HILOG_DEBUG("LocalCallContainer::OnAbilityConnectDone end.");
-
return;
}
@@ -157,5 +183,23 @@ bool LocalCallContainer::GetCallLocalreocrd(
return false;
}
+
+void LocalCallContainer::OnCallStubDied(const wptr &remote)
+{
+ auto diedRemote = remote.promote();
+ auto isExist = [&diedRemote](auto &record) {
+ return record.second->IsSameObject(diedRemote);
+ };
+
+ auto iter = std::find_if(callProxyRecords_.begin(), callProxyRecords_.end(), isExist);
+ if (iter == callProxyRecords_.end()) {
+ HILOG_ERROR("StubDied object not found from localcallrecord.");
+ return;
+ }
+
+ iter->second->OnCallStubDied(remote);
+ callProxyRecords_.erase(iter);
+ HILOG_DEBUG("LocalCallContainer::OnCallStubDied end.");
+}
} // namespace AbilityRuntime
} // namespace OHOS
\ No newline at end of file
diff --git a/frameworks/kits/ability/ability_runtime/src/local_call_record.cpp b/frameworks/kits/ability/ability_runtime/src/local_call_record.cpp
index d2c30b86491f756d8cbabf5632cea57ff93b373b..4626f8400c8e54686db3e4b34938c796589ab3b0 100644
--- a/frameworks/kits/ability/ability_runtime/src/local_call_record.cpp
+++ b/frameworks/kits/ability/ability_runtime/src/local_call_record.cpp
@@ -50,6 +50,21 @@ void LocalCallRecord::SetRemoteObject(const sptr &call)
HILOG_DEBUG("SetRemoteObject complete.");
}
+void LocalCallRecord::SetRemoteObject(const sptr &call,
+ sptr callRecipient)
+{
+ if (!call) {
+ HILOG_ERROR("remote object is nullptr");
+ return;
+ }
+
+ remoteObject_ = call;
+ callRecipient_ = callRecipient;
+
+ remoteObject_->AddDeathRecipient(callRecipient_);
+ HILOG_DEBUG("SetRemoteObject2 complete.");
+}
+
void LocalCallRecord::AddCaller(const std::shared_ptr &callback)
{
callers_.emplace_back(callback);
@@ -113,5 +128,28 @@ bool LocalCallRecord::IsExistCallBack() const
{
return (callers_.size() > 0);
}
+
+int LocalCallRecord::GetRecordId()
+{
+ return recordId_;
+}
+
+std::vector> LocalCallRecord::GetCallers()
+{
+ return callers_;
+}
+
+bool LocalCallRecord::IsSameObject(const sptr &remote)
+{
+ if (remote == nullptr) {
+ HILOG_ERROR("input remote object is nullptr");
+ return false;
+ }
+
+ bool retval = remoteObject_ == remote;
+ HILOG_DEBUG("LocalCallRecord::%{public}s the input object same as local object is %{public}s.",
+ __func__, retval ? "true" : "false");
+ return retval;
+}
} // namespace AbilityRuntime
} // namespace OHOS
\ No newline at end of file
diff --git a/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h b/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h
index fb6a3059f83231995beaae402548ef8beaa4540a..a028c817425e14237658366f339a8216ebdb1aca 100644
--- a/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h
+++ b/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h
@@ -56,6 +56,11 @@ public:
int TerminateAbility(
const sptr &token, int resultCode = -1, const Want *resultWant = nullptr) override;
+ virtual int CloseAbility(const sptr &token, int resultCode = DEFAULT_INVAL_VALUE,
+ const Want *resultWant = nullptr) override
+ {
+ return 0;
+ }
int MinimizeAbility(const sptr &token, bool fromUser) override
{
return 0;
@@ -117,7 +122,7 @@ public:
MOCK_METHOD1(GetPendinTerminateAbilityTestgRequestWant, void(int id));
MOCK_METHOD1(GetSystemMemoryAttr, void(AppExecFwk::SystemMemoryAttr &memoryInfo));
MOCK_METHOD3(StartContinuation, int(const Want &want, const sptr &abilityToken, int32_t status));
- MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, const int32_t result));
+ MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, int32_t result));
MOCK_METHOD1(LockMissionForCleanup, int(int32_t missionId));
MOCK_METHOD1(UnlockMissionForCleanup, int(int32_t missionId));
@@ -134,6 +139,7 @@ public:
MOCK_METHOD1(CleanMission, int(int32_t missionId));
MOCK_METHOD0(CleanAllMissions, int());
MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId));
+ MOCK_METHOD2(MoveMissionToFront, int(int32_t missionId, const StartOptions &startOptions));
MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info));
@@ -272,9 +278,9 @@ public:
return true;
}
- bool SendANRProcessID(int pid) override
+ int SendANRProcessID(int pid) override
{
- return true;
+ return 0;
}
int RegisterSnapshotHandler(const sptr& handler) override
diff --git a/frameworks/kits/ability/native/BUILD.gn b/frameworks/kits/ability/native/BUILD.gn
index 6053ad90c7787b0e4c61373cbe500c2fd4b142c3..db347c3f52816cbfb2845df20117151e1e7a4e28 100644
--- a/frameworks/kits/ability/native/BUILD.gn
+++ b/frameworks/kits/ability/native/BUILD.gn
@@ -76,6 +76,7 @@ config("ability_public_config") {
"//third_party/libuv/include",
"//foundation/aafwk/standard/frameworks/kits/appkit/native/ability_runtime/context",
"//foundation/aafwk/standard/interfaces/innerkits/base/include/ohos/aafwk/base",
+ "//foundation/aafwk/standard/frameworks/kits/ability/native/include",
"//foundation/aafwk/standard/frameworks/kits/ability/native/include/continuation/remote_register_service",
"//foundation/aafwk/standard/frameworks/kits/ability/native/include/continuation/distributed",
"//foundation/aafwk/standard/frameworks/kits/ability/native/include/distributed_ability_runtime",
@@ -109,7 +110,7 @@ ohos_shared_library("static_subscriber_ipc") {
]
external_deps = [
- "ability_runtime:want",
+ "ability_base:want",
"ces_standard:cesfwk_innerkits",
"ipc:ipc_core",
]
@@ -124,6 +125,7 @@ ohos_shared_library("abilitykit_native") {
"//foundation/distributeddatamgr/appdatamgr/frameworks/jskitsimpl/common/include",
"//foundation/distributeddatamgr/appdatamgr/frameworks/jskitsimpl/napi_dataability/include",
"//foundation/distributeddatamgr/appdatamgr/frameworks/jskitsimpl/napi_resultset/include",
+ "//foundation/distributeddatamgr/objectstore/interfaces/innerkits/",
"//base/global/i18n_standard/frameworks/intl/include",
]
@@ -167,6 +169,7 @@ ohos_shared_library("abilitykit_native") {
"${SUBSYSTEM_DIR}/src/form_runtime/form_extension_provider_client.cpp",
"${SUBSYSTEM_DIR}/src/form_runtime/js_form_extension.cpp",
"${SUBSYSTEM_DIR}/src/form_runtime/js_form_extension_context.cpp",
+ "${SUBSYSTEM_DIR}/src/form_runtime/js_form_extension_util.cpp",
"${SUBSYSTEM_DIR}/src/js_datashare_ext_ability.cpp",
"${SUBSYSTEM_DIR}/src/js_datashare_ext_ability_context.cpp",
"${SUBSYSTEM_DIR}/src/js_service_extension.cpp",
@@ -232,6 +235,7 @@ ohos_shared_library("abilitykit_native") {
public_configs = [
":ability_public_config",
"//foundation/aafwk/standard/frameworks/kits/ability/ability_runtime:ability_context_public_config",
+ "//foundation/aafwk/standard/frameworks/kits/wantagent:wantagent_innerkits_public_config",
]
deps = [
@@ -242,6 +246,8 @@ ohos_shared_library("abilitykit_native") {
"//foundation/aafwk/standard/common/task_dispatcher:task_dispatcher",
"//foundation/aafwk/standard/frameworks/kits/ability/ability_runtime:ability_context_native",
"//foundation/aafwk/standard/frameworks/kits/appkit:app_context",
+ "//foundation/aafwk/standard/frameworks/kits/appkit:appkit_delegator",
+ "//foundation/aafwk/standard/frameworks/kits/wantagent:wantagent_innerkits",
"//foundation/aafwk/standard/interfaces/innerkits/ability_manager:ability_manager",
"//foundation/aafwk/standard/interfaces/innerkits/app_manager:app_manager",
"//foundation/aafwk/standard/interfaces/innerkits/dataobs_manager:dataobs_manager",
@@ -252,16 +258,20 @@ ohos_shared_library("abilitykit_native") {
"//foundation/distributedschedule/dmsfwk/interfaces/innerkits/uri:zuri",
"//foundation/distributedschedule/samgr/interfaces/innerkits/samgr_proxy:samgr_proxy",
"//foundation/multimodalinput/input/frameworks/proxy:libmmi-common",
+ "//foundation/resourceschedule/background_task_mgr/interfaces/innerkits:bgtaskmgr_innerkits",
"//third_party/icu/icu4c:shared_icuuc",
]
external_deps = [
+ "ability_base:configuration",
"ability_runtime:ability_context_native",
"ability_runtime:app_manager",
"ability_runtime:napi_base_context",
"ability_runtime:runtime",
+ "access_token:libaccesstoken_sdk",
"bytrace_standard:bytrace_core",
"ces_standard:cesfwk_innerkits",
+ "distributeddataobject:distributeddataobject_impl",
"form_runtime:fmskit_native",
"form_runtime:form_manager",
"ipc:ipc_core",
@@ -280,6 +290,8 @@ ohos_shared_library("abilitykit_native") {
"//foundation/ace/napi:ace_napi",
"//foundation/appexecfwk/standard/interfaces/innerkits/libeventhandler:libeventhandler",
"//foundation/graphic/standard:libwmclient",
+ "//foundation/multimedia/image_standard/interfaces/innerkits:image_native",
+ "//foundation/windowmanager/dm:libdm",
"//foundation/windowmanager/interfaces/kits/napi/window_runtime:windowstage_kit",
"//foundation/windowmanager/wm:libwm",
]
diff --git a/frameworks/kits/ability/native/include/ability.h b/frameworks/kits/ability/native/include/ability.h
index 55b6f88512d06c6b7b8b07a5a346a41e34ac2a8b..6557de4057181367440eb59d6208fd2c53c91e4f 100755
--- a/frameworks/kits/ability/native/include/ability.h
+++ b/frameworks/kits/ability/native/include/ability.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Huawei Device Co., Ltd.
+ * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -30,6 +30,7 @@
#include "context.h"
#include "continuation_handler.h"
#include "continuation_state.h"
+#include "display_manager.h"
#include "dummy_ability_package.h"
#include "dummy_component_container.h"
#include "dummy_notification_request.h"
@@ -44,6 +45,7 @@
#include "iremote_object.h"
#include "pac_map.h"
#include "want.h"
+#include "want_agent.h"
#include "window_option.h"
#include "window_scene.h"
#include "wm_common.h"
@@ -78,7 +80,8 @@ class Ability : public IAbilityEvent,
public FormCallbackInterface,
public IAbilityContinuation,
public IAbilityCallback,
- public std::enable_shared_from_this {
+ public std::enable_shared_from_this,
+ public OHOS::Rosen::DisplayManager::IDisplayListener {
public:
friend class PageAbilityImpl;
friend class NewAbilityImpl;
@@ -493,6 +496,12 @@ public:
*/
void OnConfigurationUpdatedNotify(const Configuration &configuration);
+ /**
+ * @brief Update context.config when configuration is updated.
+ *
+ */
+ virtual void UpdateContextConfiguration() {};
+
/**
* @brief Called when the system configuration is updated.
*
@@ -671,6 +680,14 @@ public:
*/
virtual void Dump(const std::string &extra);
+ /**
+ * @brief dump ability info
+ *
+ * @param params dump params that indicate different dump targets
+ * @param info dump ability info
+ */
+ virtual void Dump(const std::vector ¶ms, std::vector &info);
+
/**
* @brief Keeps this Service ability in the background and displays a notification bar.
* To use this method, you need to request the ohos.permission.KEEP_BACKGROUND_RUNNING permission from the system.
@@ -1006,6 +1023,21 @@ public:
*/
bool DeleteForm(const int64_t formId);
+ /**
+ * @brief Keep this Service ability in the background and displays a notification bar.
+ *
+ * @param wantAgent Indicates which ability to start when user click the notification bar.
+ * @return the method result code, 0 means succeed
+ */
+ virtual int StartBackgroundRunning(const AbilityRuntime::WantAgent::WantAgent &wantAgent) final;
+
+ /**
+ * @brief Cancel background running of this ability to free up system memory.
+ *
+ * @return the method result code, 0 means succeed
+ */
+ virtual int StopBackgroundRunning() final;
+
/**
* @brief The form callback.
*/
@@ -1425,6 +1457,13 @@ protected:
*/
virtual void DoOnForeground(const Want& want);
+ /**
+ * @brief requeset focus for current window.
+ *
+ * You can override this function to implement your own processing logic
+ */
+ virtual void RequsetFocus(const Want &want);
+
/**
* @brief Acquire the window option.
* @return window option.
@@ -1437,6 +1476,13 @@ protected:
*/
bool IsRestoredInContinuation() const;
+ /**
+ * @brief wait for distributed object to complete sync
+ *
+ * @param want the want param.
+ */
+ void WaitingDistributedObjectSyncComplete(const Want& want);
+
/**
* @brief Notify continuation
*
@@ -1445,6 +1491,15 @@ protected:
*/
void NotityContinuationResult(const Want& want, bool success);
+ /**
+ * @brief override Rosen::DisplayManager::IDisplayListener virtual callback function
+ *
+ * @param displayId displayId
+ */
+ void OnCreate(Rosen::DisplayId displayId) override;
+ void OnDestroy(Rosen::DisplayId displayId) override;
+ void OnChange(Rosen::DisplayId displayId, Rosen::DisplayChangeEvent changeEvent) override;
+
protected:
std::shared_ptr abilityContext_ = nullptr;
std::shared_ptr scene_ = nullptr;
diff --git a/frameworks/kits/ability/native/include/ability_context.h b/frameworks/kits/ability/native/include/ability_context.h
index 02466e25abe71992a4ed1bab08380d5794069ea7..7c4ffcf967cd15afa0640ee1f7a5eb0d09c0c5d3 100644
--- a/frameworks/kits/ability/native/include/ability_context.h
+++ b/frameworks/kits/ability/native/include/ability_context.h
@@ -368,15 +368,15 @@ public:
* @brief Creates a Context object for an application with the given bundle name.
*
* @param bundleName Indicates the bundle name of the application.
- *
* @param flag Indicates the flag for creating a Context object. It can be 0, any of
* the following values, or any combination of the following values: CONTEXT_IGNORE_SECURITY,
* CONTEXT_INCLUDE_CODE, and CONTEXT_RESTRICTED. The value 0 indicates that there is no restriction
* on creating contexts for applications.
+ * @param accountId Indicates the account Id.
*
* @return Returns a Context object created for the specified application.
*/
- std::shared_ptr CreateBundleContext(std::string bundleName, int flag);
+ std::shared_ptr CreateBundleContext(std::string bundleName, int flag, int accountId = DEFAULT_ACCOUNT_ID);
/**
* @brief Obtains a resource manager.
diff --git a/frameworks/kits/ability/native/include/ability_impl.h b/frameworks/kits/ability/native/include/ability_impl.h
index cf2afeb8a7be214080708c16877ed46f0aef3014..00b69e0cc1f48f5caf457db558d1a5f97ce01aa9 100755
--- a/frameworks/kits/ability/native/include/ability_impl.h
+++ b/frameworks/kits/ability/native/include/ability_impl.h
@@ -51,14 +51,14 @@ public:
*
* @param useNewMission new mission flag.
*/
- static void SetUseNewMission(bool useNewMission);
+ static void SetUseNewMission(bool useNewMission);
/**
* @brief Get if use new mission.
*
* @return return true if use new mission.
*/
- static bool IsUseNewMission();
+ static bool IsUseNewMission();
/**
* @brief Connect the ability. and Calling information back to Ability.
@@ -222,7 +222,8 @@ public:
*
* @return Returns the number of data records updated.
*/
- virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates);
+ virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value,
+ const NativeRdb::DataAbilityPredicates &predicates);
/**
* @brief Deletes one or more data records from the database.
@@ -331,7 +332,8 @@ public:
*/
std::shared_ptr CreatePostEventTimeouter(std::string taskstr);
- virtual std::vector> ExecuteBatch(const std::vector> &operations);
+ virtual std::vector> ExecuteBatch(
+ const std::vector> &operations);
/**
* @brief continue ability to target device.
@@ -349,7 +351,7 @@ public:
*
* @return
*/
- virtual void NotifyContinuationResult(const int32_t result);
+ virtual void NotifyContinuationResult(int32_t result);
bool IsStageBasedModel() const;
diff --git a/frameworks/kits/ability/native/include/ability_local_record.h b/frameworks/kits/ability/native/include/ability_local_record.h
index aedd0e9222ff6ee0384eb50fdd2fe869d9edb4ee..42acc4f4cbeb697df544693546d582c6a013a655 100644
--- a/frameworks/kits/ability/native/include/ability_local_record.h
+++ b/frameworks/kits/ability/native/include/ability_local_record.h
@@ -23,6 +23,8 @@
#include "ability_info.h"
#include "application_info.h"
#include "refbase.h"
+#include "want.h"
+
namespace OHOS {
namespace AppExecFwk {
class AbilityThread;
@@ -123,6 +125,10 @@ public:
* @return None.
*/
void SetCompatibleVersion(int compatibleVersion);
+
+ void SetWant(const std::shared_ptr &want);
+
+ const std::shared_ptr &GetWant();
private:
std::shared_ptr abilityInfo_ = nullptr;
sptr token_;
@@ -131,6 +137,7 @@ private:
std::shared_ptr abilityImpl_ = nullptr; // store abilityImpl
sptr abilityThread_;
int compatibleVersion_ = 0;
+ std::shared_ptr want_ = nullptr;
};
} // namespace AppExecFwk
} // namespace OHOS
diff --git a/frameworks/kits/ability/native/include/ability_runtime/js_ability.h b/frameworks/kits/ability/native/include/ability_runtime/js_ability.h
index 59db15887636c01c21f82e3bc06e5fdc1d0fc712..989495a67579ef4c723e0fcb4f6e5ca04309ef37 100755
--- a/frameworks/kits/ability/native/include/ability_runtime/js_ability.h
+++ b/frameworks/kits/ability/native/include/ability_runtime/js_ability.h
@@ -17,6 +17,7 @@
#define ABILITY_RUNTIME_JS_ABILITY_H
#include "ability.h"
+#include "ability_delegator_infos.h"
class NativeReference;
class NativeValue;
@@ -54,6 +55,7 @@ public:
void OnBackground() override;
bool OnContinue(WantParams &wantParams) override;
void OnConfigurationUpdated(const Configuration &configuration) override;
+ void UpdateContextConfiguration() override;
void OnNewWant(const Want &want) override;
void OnAbilityResult(int requestCode, int resultCode, const Want &resultData) override;
@@ -64,11 +66,13 @@ public:
protected:
void DoOnForeground(const Want &want) override;
+ void RequsetFocus(const Want &want) override;
private:
void CallObjectMethod(const char *name, NativeValue *const *argv = nullptr, size_t argc = 0);
std::unique_ptr CreateAppWindowStage();
void GetPageStackFromWant(const Want &want, std::string &pageStack);
+ std::shared_ptr CreateADelegatorAbilityProperty();
JsRuntime &jsRuntime_;
std::shared_ptr shellContextRef_;
diff --git a/frameworks/kits/ability/native/include/ability_thread.h b/frameworks/kits/ability/native/include/ability_thread.h
index 2b870321f205bc52bf9e4ba1571d8da954edc34a..5c35b3392cc9ae348ee10293ae4c2845769b1aff 100644
--- a/frameworks/kits/ability/native/include/ability_thread.h
+++ b/frameworks/kits/ability/native/include/ability_thread.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Huawei Device Co., Ltd.
+ * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -230,7 +230,8 @@ public:
*
* @return Returns the number of data records updated.
*/
- int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates);
+ int Update(const Uri &uri, const NativeRdb::ValuesBucket &value,
+ const NativeRdb::DataAbilityPredicates &predicates);
/**
* @brief Deletes one or more data records from the database.
@@ -313,7 +314,7 @@ public:
*
* @param result: Continuation result
*/
- void NotifyContinuationResult(const int32_t result);
+ void NotifyContinuationResult(int32_t result);
/**
* @brief Converts the given uri that refer to the Data ability into a normalized URI. A normalized URI can be used
@@ -394,16 +395,16 @@ public:
* @return Returns true on success, others on failure.
*/
bool CheckObsPermission();
-
+
/**
* @brief Dump ability runner info.
*
* @param runnerInfo ability runner info.
*/
- void DumpAbilityInfo(std::vector &info);
+ void DumpAbilityInfo(const std::vector ¶ms, std::vector &info);
sptr CallRequest();
-
+
std::vector> ExecuteBatch(
const std::vector> &operations);
private:
@@ -505,6 +506,13 @@ private:
*/
void HandleUpdateConfiguration(const Configuration &config);
+ /**
+ * @brief Handle the scheduling update configuration of extension.
+ *
+ * @param config Configuration
+ */
+ void HandleExtensionUpdateConfiguration(const Configuration &config);
+
std::shared_ptr BuildAbilityContext(
const std::shared_ptr &abilityInfo, const std::shared_ptr &application,
const sptr &token, const std::shared_ptr &stageContext);
diff --git a/frameworks/kits/ability/native/include/datashare_helper.h b/frameworks/kits/ability/native/include/datashare_helper.h
index 39cb1935acea396869e28e72de8bf2f7f1732525..29f15ba6204ae3db567c35b5a7cca94538170eec 100644
--- a/frameworks/kits/ability/native/include/datashare_helper.h
+++ b/frameworks/kits/ability/native/include/datashare_helper.h
@@ -264,7 +264,6 @@ private:
std::shared_ptr uri_ = nullptr;
sptr dataShareProxy_ = nullptr;
bool isSystemCaller_ = false;
- std::mutex lock_;
static std::mutex oplock_;
sptr callerDeathRecipient_ = nullptr;
std::map, sptr> registerMap_;
diff --git a/frameworks/kits/ability/native/include/distributed_ability_runtime/distributed_client.h b/frameworks/kits/ability/native/include/distributed_ability_runtime/distributed_client.h
index f0223d26a40ba8da62e71098202f19cd62078dfe..f931e17ee99613f02c29201f15f589ac75c14b86 100644
--- a/frameworks/kits/ability/native/include/distributed_ability_runtime/distributed_client.h
+++ b/frameworks/kits/ability/native/include/distributed_ability_runtime/distributed_client.h
@@ -31,14 +31,15 @@ class DistributedClient {
public:
DistributedClient() = default;
virtual ~DistributedClient() = default;
- int32_t StartRemoteAbility(const OHOS::AAFwk::Want& want, int32_t callerUid, int32_t requestCode);
+ int32_t StartRemoteAbility(const OHOS::AAFwk::Want& want, int32_t callerUid, int32_t requestCode,
+ uint32_t accessToken);
int32_t ContinueMission(const std::string& srcDeviceId, const std::string& dstDeviceId,
int32_t missionId, const sptr& callback, const OHOS::AAFwk::WantParams& wantParams);
int32_t StartContinuation(const OHOS::AAFwk::Want& want, int32_t missionId, int32_t callerUid,
- int32_t status);
+ int32_t status, uint32_t accessToken);
int32_t NotifyCompleteContinuation(const std::u16string &devId, int32_t sessionId, bool isSuccess);
- int32_t ConnectRemoteAbility(const OHOS::AAFwk::Want& want,
- const sptr& connect, int32_t callerUid, int32_t callerPid);
+ int32_t ConnectRemoteAbility(const OHOS::AAFwk::Want& want, const sptr& connect,
+ int32_t callerUid, int32_t callerPid, uint32_t accessToken);
int32_t DisconnectRemoteAbility(const sptr& connect);
int32_t StartSyncRemoteMissions(const std::string& devId, bool fixConflict, int64_t tag);
int32_t StopSyncRemoteMissions(const std::string& devId);
@@ -48,6 +49,9 @@ public:
std::vector& missionInfos);
int32_t GetRemoteMissionSnapshotInfo(const std::string& deviceId, int32_t missionId,
std::unique_ptr& missionSnapshot);
+ int32_t StartRemoteAbilityByCall(const OHOS::AAFwk::Want& want, const sptr& connect,
+ int32_t callerUid, int32_t callerPid, uint32_t tokenCaller);
+ int32_t ReleaseRemoteAbility(const sptr& connect, const AppExecFwk::ElementName &element);
enum {
START_REMOTE_ABILITY = 1,
CONNECT_REMOTE_ABILITY = 6,
@@ -61,6 +65,8 @@ public:
START_SYNC_MISSIONS = 92,
STOP_SYNC_MISSIONS = 98,
GET_REMOTE_MISSION_SNAPSHOT_INFO = 99,
+ START_REMOTE_ABILITY_BY_CALL = 150,
+ RELEASE_REMOTE_ABILITY = 151,
};
private:
sptr GetDmsProxy();
diff --git a/frameworks/kits/ability/native/include/extension.h b/frameworks/kits/ability/native/include/extension.h
index fd6a17f88ecacbbb1841e27db184c8e239a60bdd..c49d6b7187692ac6ec37604b8321dd4b5a4a2ef5 100644
--- a/frameworks/kits/ability/native/include/extension.h
+++ b/frameworks/kits/ability/native/include/extension.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Huawei Device Co., Ltd.
+ * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -27,6 +27,7 @@ struct AbilityInfo;
class OHOSApplication;
class AbilityHandler;
class AbilityLocalRecord;
+class Configuration;
}
namespace AbilityRuntime {
using Want = OHOS::AAFwk::Want;
@@ -115,6 +116,13 @@ public:
*/
virtual void OnStop();
+ /**
+ * @brief Called when the system configuration is updated.
+ *
+ * @param configuration Indicates the updated configuration information.
+ */
+ virtual void OnConfigurationUpdated(const AppExecFwk::Configuration& configuration);
+
std::shared_ptr abilityInfo_ = nullptr;
private:
std::shared_ptr handler_ = nullptr;
diff --git a/frameworks/kits/ability/native/include/extension_base.inl b/frameworks/kits/ability/native/include/extension_base.inl
index 02d1f12e186e33558f435bce72e9738e153c168e..6102eaae157834f4bd7c32b4655ab2a9087f0595 100644
--- a/frameworks/kits/ability/native/include/extension_base.inl
+++ b/frameworks/kits/ability/native/include/extension_base.inl
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Huawei Device Co., Ltd.
+ * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -49,6 +49,7 @@ std::shared_ptr ExtensionBase::CreateAndInitContext(const std::shared_ptr<
auto abilityInfo = record->GetAbilityInfo();
context->SetAbilityInfo(abilityInfo);
context->InitHapModuleInfo(abilityInfo);
+ context->SetConfiguration(appContext->GetConfiguration());
return context;
}
diff --git a/frameworks/kits/ability/native/include/extension_impl.h b/frameworks/kits/ability/native/include/extension_impl.h
index 1cbcca05e1a6fdd079f1443acd89a3327a4c9280..773cd918e15867ab7f4916606bdb6e9a5630a563 100644
--- a/frameworks/kits/ability/native/include/extension_impl.h
+++ b/frameworks/kits/ability/native/include/extension_impl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Huawei Device Co., Ltd.
+ * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -17,6 +17,7 @@
#define FOUNDATION_ABILITYRUNTIME_OHOS_EXTENSION_IMPL_H
#include "extension.h"
+#include "lifecycle_state_info.h"
namespace OHOS {
class IRemoteObject;
@@ -61,6 +62,13 @@ public:
*/
virtual void HandleExtensionTransaction(const Want &want, const AAFwk::LifeCycleStateInfo &targetState);
+ /**
+ * @brief scheduling update configuration of extension.
+ *
+ * @param config Configuration
+ */
+ void ScheduleUpdateConfiguration(const AppExecFwk::Configuration &config);
+
/**
* @brief Connect the Extension. and Calling information back to Extension.
*
diff --git a/frameworks/kits/ability/native/include/form_runtime/js_form_extension.h b/frameworks/kits/ability/native/include/form_runtime/js_form_extension.h
index 179cda869d87b53f1669e4927d282c6528abf3e9..1bdcf41a9101220911e2a878e562377861ef35b2 100644
--- a/frameworks/kits/ability/native/include/form_runtime/js_form_extension.h
+++ b/frameworks/kits/ability/native/include/form_runtime/js_form_extension.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Huawei Device Co., Ltd.
+ * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -16,9 +16,9 @@
#ifndef FOUNDATION_APPEXECFWK_OHOS_JS_FORM_EXTENSION_H
#define FOUNDATION_APPEXECFWK_OHOS_JS_FORM_EXTENSION_H
+#include "configuration.h"
#include "form_extension.h"
-class NativeEngine;
class NativeReference;
class NativeValue;
@@ -54,16 +54,18 @@ public:
void OnVisibilityChange(const std::map& formEventsMap) override;
sptr OnConnect(const OHOS::AAFwk::Want& want) override;
+
+ void OnConfigurationUpdated(const AppExecFwk::Configuration& configuration) override;
+
private:
NativeValue* CallObjectMethod(const char* name, NativeValue* const* argv = nullptr, size_t argc = 0);
- bool UnwrapRawImageDataMap(NativeEngine& engine, NativeValue* argv,
- std::map& rawImageDataMap);
void GetSrcPath(std::string &srcPath);
JsRuntime& jsRuntime_;
std::unique_ptr jsObj_;
sptr providerRemoteObject_ = nullptr;
+ std::shared_ptr shellContextRef_ = nullptr;
};
} // namespace AbilityRuntime
} // namespace OHOS
diff --git a/interfaces/kits/js/bundle/shortcutinfo1.d.ts b/frameworks/kits/ability/native/include/form_runtime/js_form_extension_util.h
similarity index 56%
rename from interfaces/kits/js/bundle/shortcutinfo1.d.ts
rename to frameworks/kits/ability/native/include/form_runtime/js_form_extension_util.h
index 1e6ce78bf9df84fa496e9faa5397d1b52ad1961e..bc897a1e240e734443621df12de3c32c945ff8f3 100644
--- a/interfaces/kits/js/bundle/shortcutinfo1.d.ts
+++ b/frameworks/kits/ability/native/include/form_runtime/js_form_extension_util.h
@@ -1,31 +1,28 @@
-/*
- * Copyright (c) 2021 Huawei Device Co., Ltd.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export interface ShortcutIntent{
- readonly targetBundle: string;
- readonly targetClass: string;
-}
-
-export interface ShortcutInfo {
- readonly id: string;
- readonly bundleName: string;
- readonly hostAbility: string;
- readonly icon: string;
- readonly label: string;
- readonly disableMessage: string;
- readonly intents: Array;
- readonly isStatic?: boolean
- readonly isHomeShortcut?: boolean;
- readonly isEnabled?: boolean;
-}
\ No newline at end of file
+/*
+ * Copyright (c) 2021 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef OHOS_ABILITY_RUNTIME_JS_FORM_EXTENSION_UTILS_H
+#define OHOS_ABILITY_RUNTIME_JS_FORM_EXTENSION_UTILS_H
+
+#include "native_engine/native_engine.h"
+
+#include