Merge branch 'master' of gitee.com:openharmony/ability_ability_runtime into master

This commit is contained in:
周士成 2022-07-05 08:47:12 +00:00 committed by Gitee
commit 1067b4d373
14 changed files with 192 additions and 131 deletions

View File

@ -32,11 +32,9 @@ namespace OHOS {
namespace AbilityRuntime { namespace AbilityRuntime {
namespace { namespace {
constexpr int32_t INDEX_ZERO = 0; constexpr int32_t INDEX_ZERO = 0;
constexpr int32_t INDEX_ONE = 1;
constexpr int32_t ERROR_CODE_ONE = 1; constexpr int32_t ERROR_CODE_ONE = 1;
constexpr size_t ARGC_ONE = 1; constexpr size_t ARGC_ONE = 1;
constexpr size_t ARGC_TWO = 2; constexpr size_t ARGC_TWO = 2;
constexpr size_t ARGC_THREE = 3;
const int UPDATE_FORM_PARAMS_SIZE = 2; const int UPDATE_FORM_PARAMS_SIZE = 2;
class JsFormExtensionContext final { class JsFormExtensionContext final {
public: public:
@ -126,8 +124,8 @@ private:
NativeValue* OnStartAbility(NativeEngine& engine, NativeCallbackInfo& info) NativeValue* OnStartAbility(NativeEngine& engine, NativeCallbackInfo& info)
{ {
HILOG_INFO("OnStartAbility is called"); HILOG_INFO("OnStartAbility is called");
// only support one or two or three params // only support one or two params
if (info.argc != ARGC_ONE && info.argc != ARGC_TWO && info.argc != ARGC_THREE) { if (info.argc != ARGC_ONE && info.argc != ARGC_TWO) {
HILOG_ERROR("Not enough params"); HILOG_ERROR("Not enough params");
return engine.CreateUndefined(); return engine.CreateUndefined();
} }
@ -142,16 +140,8 @@ private:
want.GetElement().GetAbilityName().c_str()); want.GetElement().GetAbilityName().c_str());
unwrapArgc++; unwrapArgc++;
AAFwk::StartOptions startOptions;
if (info.argc > ARGC_ONE && info.argv[INDEX_ONE]->TypeOf() == NATIVE_OBJECT) {
HILOG_INFO("OnStartAbility start options is used.");
AppExecFwk::UnwrapStartOptions(reinterpret_cast<napi_env>(&engine),
reinterpret_cast<napi_value>(info.argv[INDEX_ONE]), startOptions);
unwrapArgc++;
}
AsyncTask::CompleteCallback complete = AsyncTask::CompleteCallback complete =
[weak = context_, want, startOptions, unwrapArgc](NativeEngine& engine, AsyncTask& task, int32_t status) { [weak = context_, want, unwrapArgc](NativeEngine& engine, AsyncTask& task, int32_t status) {
HILOG_INFO("startAbility begin"); HILOG_INFO("startAbility begin");
auto context = weak.lock(); auto context = weak.lock();
if (!context) { if (!context) {
@ -161,8 +151,8 @@ private:
} }
ErrCode errcode = ERR_OK; ErrCode errcode = ERR_OK;
(unwrapArgc == 1) ? errcode = context->StartAbility(want) : // entry to the core functionality.
errcode = context->StartAbility(want, startOptions); errcode = context->StartAbility(want);
if (errcode == 0) { if (errcode == 0) {
task.Resolve(engine, engine.CreateUndefined()); task.Resolve(engine, engine.CreateUndefined());
} else { } else {

View File

@ -53,18 +53,8 @@ int FormExtensionContext::UpdateForm(const int64_t formId, const AppExecFwk::For
ErrCode FormExtensionContext::StartAbility(const AAFwk::Want &want) const ErrCode FormExtensionContext::StartAbility(const AAFwk::Want &want) const
{ {
HILOG_DEBUG("%{public}s begin.", __func__); HILOG_DEBUG("%{public}s begin.", __func__);
ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want, token_, -1); // route to FMS
HILOG_DEBUG("%{public}s. End calling StartAbility. ret=%{public}d", __func__, err); ErrCode err = AppExecFwk::FormMgr::GetInstance().StartAbility(want, token_);
if (err != ERR_OK) {
HILOG_ERROR("FormExtensionContext::StartAbility is failed %{public}d", err);
}
return err;
}
ErrCode FormExtensionContext::StartAbility(const AAFwk::Want &want, const AAFwk::StartOptions &startOptions) const
{
HILOG_DEBUG("%{public}s begin.", __func__);
ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want, startOptions, token_, -1);
HILOG_DEBUG("%{public}s. End calling StartAbility. ret=%{public}d", __func__, err); HILOG_DEBUG("%{public}s. End calling StartAbility. ret=%{public}d", __func__, err);
if (err != ERR_OK) { if (err != ERR_OK) {
HILOG_ERROR("FormExtensionContext::StartAbility is failed %{public}d", err); HILOG_ERROR("FormExtensionContext::StartAbility is failed %{public}d", err);

View File

@ -825,9 +825,11 @@ void MainThread::HandleLaunchApplication(const AppLaunchData &appLaunchData, con
std::string contactsDataAbility("com.ohos.contactsdataability"); std::string contactsDataAbility("com.ohos.contactsdataability");
std::string mediaDataAbility("com.ohos.medialibrary.medialibrarydata"); std::string mediaDataAbility("com.ohos.medialibrary.medialibrarydata");
std::string telephonyDataAbility("com.ohos.telephonydataability"); std::string telephonyDataAbility("com.ohos.telephonydataability");
std::string fusionSearchAbility("com.ohos.FusionSearch");
auto appInfo = appLaunchData.GetApplicationInfo(); auto appInfo = appLaunchData.GetApplicationInfo();
auto bundleName = appInfo.bundleName; auto bundleName = appInfo.bundleName;
if (bundleName == contactsDataAbility || bundleName == mediaDataAbility || bundleName == telephonyDataAbility) { if (bundleName == contactsDataAbility || bundleName == mediaDataAbility || bundleName == telephonyDataAbility
|| bundleName == fusionSearchAbility) {
std::vector<std::string> localPaths; std::vector<std::string> localPaths;
ChangeToLocalPath(bundleName, appInfo.moduleSourceDirs, localPaths); ChangeToLocalPath(bundleName, appInfo.moduleSourceDirs, localPaths);
LoadAbilityLibrary(localPaths); LoadAbilityLibrary(localPaths);

View File

@ -18,7 +18,6 @@
#include <cerrno> #include <cerrno>
#include <climits> #include <climits>
#include <cstdlib> #include <cstdlib>
#include <fstream>
#include <sys/epoll.h> #include <sys/epoll.h>
#include "native_engine/impl/ark/ark_native_engine.h" #include "native_engine/impl/ark/ark_native_engine.h"
@ -28,6 +27,7 @@
#include "js_module_searcher.h" #include "js_module_searcher.h"
#include "js_runtime_utils.h" #include "js_runtime_utils.h"
#include "js_timer.h" #include "js_timer.h"
#include "js_worker.h"
#include "parameters.h" #include "parameters.h"
#include "systemcapability.h" #include "systemcapability.h"
@ -40,7 +40,6 @@ namespace AbilityRuntime {
namespace { namespace {
constexpr uint8_t SYSCAP_MAX_SIZE = 64; constexpr uint8_t SYSCAP_MAX_SIZE = 64;
constexpr int64_t DEFAULT_GC_POOL_SIZE = 0x10000000; // 256MB constexpr int64_t DEFAULT_GC_POOL_SIZE = 0x10000000; // 256MB
constexpr int64_t ASSET_FILE_MAX_SIZE = 20 * 1024 * 1024;
#if defined(_ARM64_) #if defined(_ARM64_)
constexpr char ARK_DEBUGGER_LIB_PATH[] = "/system/lib64/libark_debugger.z.so"; constexpr char ARK_DEBUGGER_LIB_PATH[] = "/system/lib64/libark_debugger.z.so";
#else #else
@ -203,84 +202,6 @@ bool MakeFilePath(const std::string& codePath, const std::string& modulePath, st
return true; return true;
} }
void RegisterInitWorkerFunc(NativeEngine& engine)
{
auto&& initWorkerFunc = [](NativeEngine* nativeEngine) {
HILOG_INFO("RegisterInitWorkerFunc called");
if (nativeEngine == nullptr) {
HILOG_ERROR("Input nativeEngine is nullptr");
return;
}
NativeObject* globalObj = ConvertNativeValueTo<NativeObject>(nativeEngine->GetGlobal());
if (globalObj == nullptr) {
HILOG_ERROR("Failed to get global object");
return;
}
InitConsoleLogModule(*nativeEngine, *globalObj);
};
engine.SetInitWorkerFunc(initWorkerFunc);
}
bool GetResourceData(const std::string& filePath, std::vector<uint8_t>& content)
{
std::ifstream stream(filePath);
if (!stream.is_open()) {
HILOG_ERROR("GetResourceData failed with file can't open, check uri.");
return false;
}
stream.seekg(0, std::ios::end);
auto fileLen = stream.tellg();
if (fileLen > ASSET_FILE_MAX_SIZE) {
HILOG_ERROR("GetResourceData failed with file too large.");
stream.close();
return false;
}
content.resize(fileLen);
stream.seekg(0, std::ios::beg);
stream.read(reinterpret_cast<char*>(content.data()), content.size());
stream.close();
return true;
}
void RegisterAssetFunc(NativeEngine& engine, const std::string& codePath)
{
auto&& assetFunc = [codePath](const std::string& uri, std::vector<uint8_t>& content, std::string &ami) {
if (uri.empty()) {
HILOG_ERROR("Uri is empty.");
return;
}
HILOG_INFO("RegisterAssetFunc called, uri: %{private}s", uri.c_str());
size_t index = uri.find_last_of(".");
if (index == std::string::npos) {
HILOG_ERROR("Invalid uri");
return;
}
std::string fileUri = uri.substr(0, index) + ".abc";
std::string targetFile = codePath;
targetFile += (codePath.back() == '/') ? fileUri : "/" + fileUri;
ami = targetFile;
HILOG_INFO("Get asset, ami: %{private}s", ami.c_str());
if (!GetResourceData(ami, content)) {
HILOG_ERROR("Get asset content failed.");
return;
}
};
engine.SetGetAssetFunc(assetFunc);
}
void RegisterWorker(NativeEngine& engine, const std::string& codePath)
{
RegisterInitWorkerFunc(engine);
RegisterAssetFunc(engine, codePath);
}
class UvLoopHandler : public AppExecFwk::FileDescriptorListener, public std::enable_shared_from_this<UvLoopHandler> { class UvLoopHandler : public AppExecFwk::FileDescriptorListener, public std::enable_shared_from_this<UvLoopHandler> {
public: public:
explicit UvLoopHandler(uv_loop_t* uvLoop) : uvLoop_(uvLoop) {} explicit UvLoopHandler(uv_loop_t* uvLoop) : uvLoop_(uvLoop) {}
@ -412,7 +333,7 @@ bool JsRuntime::Initialize(const Options& options)
moduleManager->SetAppLibPath(packagePath.c_str()); moduleManager->SetAppLibPath(packagePath.c_str());
} }
RegisterWorker(*nativeEngine_, options.codePath); InitWorkerModule(*nativeEngine_, options.codePath);
return true; return true;
} }

View File

@ -0,0 +1,117 @@
/*
* Copyright (c) 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
*
* 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.
*/
#include "js_worker.h"
#include <cerrno>
#include <climits>
#include <cstdlib>
#include <fstream>
#include <vector>
#include "hilog_wrapper.h"
#include "js_console_log.h"
#include "js_runtime_utils.h"
namespace OHOS {
namespace AbilityRuntime {
namespace {
constexpr int64_t ASSET_FILE_MAX_SIZE = 20 * 1024 * 1024;
void InitWorkerFunc(NativeEngine* nativeEngine)
{
HILOG_INFO("RegisterInitWorkerFunc called");
if (nativeEngine == nullptr) {
HILOG_ERROR("Input nativeEngine is nullptr");
return;
}
NativeObject* globalObj = ConvertNativeValueTo<NativeObject>(nativeEngine->GetGlobal());
if (globalObj == nullptr) {
HILOG_ERROR("Failed to get global object");
return;
}
InitConsoleLogModule(*nativeEngine, *globalObj);
}
bool ReadAssetData(const std::string& filePath, std::vector<uint8_t>& content)
{
char path[PATH_MAX];
if (realpath(filePath.c_str(), path) == nullptr) {
HILOG_ERROR("ReadAssetData realpath(%{private}s) failed, errno = %{public}d", filePath.c_str(), errno);
return false;
}
std::ifstream stream(path, std::ios::binary | std::ios::ate);
if (!stream.is_open()) {
HILOG_ERROR("ReadAssetData failed to open file %{private}s", filePath.c_str());
return false;
}
auto fileLen = stream.tellg();
if (fileLen > ASSET_FILE_MAX_SIZE) {
HILOG_ERROR("ReadAssetData failed, file is too large");
return false;
}
content.resize(fileLen);
stream.seekg(0);
stream.read(reinterpret_cast<char*>(content.data()), content.size());
return true;
}
struct AssetHelper final {
explicit AssetHelper(const std::string& codePath) : codePath_(codePath)
{
if (!codePath_.empty() && codePath.back() != '/') {
codePath_.append("/");
}
}
void operator()(const std::string& uri, std::vector<uint8_t>& content, std::string &ami) const
{
if (uri.empty()) {
HILOG_ERROR("Uri is empty.");
return;
}
HILOG_INFO("RegisterAssetFunc called, uri: %{private}s", uri.c_str());
size_t index = uri.find_last_of(".");
if (index == std::string::npos) {
HILOG_ERROR("Invalid uri");
return;
}
ami = codePath_ + uri.substr(0, index) + ".abc";
HILOG_INFO("Get asset, ami: %{private}s", ami.c_str());
if (!ReadAssetData(ami, content)) {
HILOG_ERROR("Get asset content failed.");
return;
}
}
std::string codePath_;
};
}
void InitWorkerModule(NativeEngine& engine, const std::string& codePath)
{
engine.SetInitWorkerFunc(InitWorkerFunc);
engine.SetGetAssetFunc(AssetHelper(codePath));
}
} // namespace AbilityRuntime
} // namespace OHOS

View File

@ -0,0 +1,29 @@
/*
* Copyright (c) 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
*
* 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 FOUNDATION_OHOS_ABILITYRUNTIME_JS_WORKER_H
#define FOUNDATION_OHOS_ABILITYRUNTIME_JS_WORKER_H
#include <string>
#include "native_engine/native_engine.h"
namespace OHOS {
namespace AbilityRuntime {
void InitWorkerModule(NativeEngine& engine, const std::string& codePath);
} // namespace AbilityRuntime
} // namespace OHOS
#endif // FOUNDATION_OHOS_ABILITYRUNTIME_JS_WORKER_H

View File

@ -37,6 +37,10 @@ JS_ERROR:
FG: {type: INT32, desc: whether current app is in foreground} FG: {type: INT32, desc: whether current app is in foreground}
HAPPEN_TIME: {type: INT64, desc: fault trigger time} HAPPEN_TIME: {type: INT64, desc: fault trigger time}
LIFETIME: {type: INT64, desc: elapse time since process start} LIFETIME: {type: INT64, desc: elapse time since process start}
PANME: {type: STRING, desc: process name}
FIRST_FRAME: {type: STRING, desc: first stack info}
SECOND_FRAME: {type: STRING, desc: second stack info}
LAST_FRAME: {type: STRING, desc: last stack info}
THREAD_BLOCK_3S: THREAD_BLOCK_3S:
__BASE: {type: FAULT, level: CRITICAL, tag: STABILITY, desc: application freeze} __BASE: {type: FAULT, level: CRITICAL, tag: STABILITY, desc: application freeze}

View File

@ -31,7 +31,7 @@ namespace {
struct AbilityTransitionInfo : public Parcelable { struct AbilityTransitionInfo : public Parcelable {
std::string bundleName_; std::string bundleName_;
std::string abilityName_; std::string abilityName_;
uint32_t mode_ = 1; uint32_t mode_ = 0;
std::vector<AppExecFwk::SupportWindowMode> windowModes_; std::vector<AppExecFwk::SupportWindowMode> windowModes_;
sptr<IRemoteObject> abilityToken_ = nullptr; sptr<IRemoteObject> abilityToken_ = nullptr;
uint64_t displayId_ = 0; uint64_t displayId_ = 0;

View File

@ -42,6 +42,7 @@ ohos_shared_library("runtime") {
"${ability_runtime_native_path}/runtime/js_runtime.cpp", "${ability_runtime_native_path}/runtime/js_runtime.cpp",
"${ability_runtime_native_path}/runtime/js_runtime_utils.cpp", "${ability_runtime_native_path}/runtime/js_runtime_utils.cpp",
"${ability_runtime_native_path}/runtime/js_timer.cpp", "${ability_runtime_native_path}/runtime/js_timer.cpp",
"${ability_runtime_native_path}/runtime/js_worker.cpp",
"${ability_runtime_native_path}/runtime/runtime.cpp", "${ability_runtime_native_path}/runtime/runtime.cpp",
] ]

View File

@ -55,7 +55,6 @@ public:
* @return errCode ERR_OK on success, others on failure. * @return errCode ERR_OK on success, others on failure.
*/ */
ErrCode StartAbility(const AAFwk::Want &want) const; ErrCode StartAbility(const AAFwk::Want &want) const;
ErrCode StartAbility(const AAFwk::Want &want, const AAFwk::StartOptions &startOptions) const;
/** /**
* @brief Obtains information about the current ability. * @brief Obtains information about the current ability.

View File

@ -746,8 +746,8 @@ public:
void SetRestarting(const bool isRestart); void SetRestarting(const bool isRestart);
void SetRestarting(const bool isRestart, int32_t canReStartCount); void SetRestarting(const bool isRestart, int32_t canReStartCount);
int32_t GetRestartCount() const; int32_t GetRestartCount() const;
void SetDlp(bool isDlp); void SetAppIndex(const int32_t appIndex);
bool IsDlp() const; int32_t GetAppIndex() const;
bool IsRestarting() const; bool IsRestarting() const;
void SetAppState(const AppState &state); void SetAppState(const AppState &state);
AppState GetAppState() const; AppState GetAppState() const;
@ -916,7 +916,7 @@ private:
std::shared_ptr<CallContainer> callContainer_ = nullptr; std::shared_ptr<CallContainer> callContainer_ = nullptr;
bool isStartedByCall_ = false; bool isStartedByCall_ = false;
bool isStartToBackground_ = false; bool isStartToBackground_ = false;
bool isDlp_ = false; int32_t appIndex_ = 0;
bool minimizeReason_ = false; bool minimizeReason_ = false;
bool clearMissionFlag_ = false; bool clearMissionFlag_ = false;

View File

@ -330,8 +330,6 @@ int AbilityManagerService::StartAbility(const Want &want, const sptr<IRemoteObje
return ERR_INVALID_VALUE; return ERR_INVALID_VALUE;
} }
HILOG_INFO("%{public}s", __func__);
HILOG_INFO("Start ability come, ability is %{public}s, userId is %{public}d", HILOG_INFO("Start ability come, ability is %{public}s, userId is %{public}d",
want.GetElement().GetAbilityName().c_str(), userId); want.GetElement().GetAbilityName().c_str(), userId);
@ -359,6 +357,11 @@ int AbilityManagerService::StartAbilityInner(const Want &want, const sptr<IRemot
} }
if (callerToken != nullptr && !VerificationAllToken(callerToken)) { if (callerToken != nullptr && !VerificationAllToken(callerToken)) {
auto abilityRecord = Token::GetAbilityRecordByToken(callerToken);
if (abilityRecord && abilityRecord->GetAppIndex() != 0 &&
abilityRecord->GetApplicationInfo().bundleName == want.GetElement().GetBundleName()) {
(const_cast<Want &>(want)).SetParam(DLP_INDEX, abilityRecord->GetAppIndex());
}
auto isSpecificSA = AAFwk::PermissionVerification::GetInstance()-> auto isSpecificSA = AAFwk::PermissionVerification::GetInstance()->
CheckSpecificSystemAbilityAccessPermission(); CheckSpecificSystemAbilityAccessPermission();
if (!isSpecificSA) { if (!isSpecificSA) {
@ -822,7 +825,6 @@ int AbilityManagerService::CheckOptExtensionAbility(const Want &want, AbilityReq
int AbilityManagerService::StartExtensionAbility(const Want &want, const sptr<IRemoteObject> &callerToken, int AbilityManagerService::StartExtensionAbility(const Want &want, const sptr<IRemoteObject> &callerToken,
int32_t userId, AppExecFwk::ExtensionAbilityType extensionType) int32_t userId, AppExecFwk::ExtensionAbilityType extensionType)
{ {
AbilityUtil::HandleDlpApp(const_cast<Want &>(want));
HILOG_INFO("Start extension ability come, bundlename: %{public}s, ability is %{public}s, userId is %{public}d", HILOG_INFO("Start extension ability come, bundlename: %{public}s, ability is %{public}s, userId is %{public}d",
want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId); want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId);
AAFWK::EventInfo eventInfo; AAFWK::EventInfo eventInfo;

View File

@ -48,6 +48,7 @@ const std::string DMS_SRC_NETWORK_ID = "dmsSrcNetworkId";
const std::string ABILITY_OWNER_USERID = "AbilityMS_Owner_UserId"; const std::string ABILITY_OWNER_USERID = "AbilityMS_Owner_UserId";
const std::u16string SYSTEM_ABILITY_TOKEN_CALLBACK = u"ohos.aafwk.ISystemAbilityTokenCallback"; const std::u16string SYSTEM_ABILITY_TOKEN_CALLBACK = u"ohos.aafwk.ISystemAbilityTokenCallback";
const std::string SHOW_ON_LOCK_SCREEN = "ShowOnLockScreen"; const std::string SHOW_ON_LOCK_SCREEN = "ShowOnLockScreen";
const std::string DLP_INDEX = "ohos.dlp.params.index";
int64_t AbilityRecord::abilityRecordId = 0; int64_t AbilityRecord::abilityRecordId = 0;
int64_t AbilityRecord::g_abilityRecordEventId_ = 0; int64_t AbilityRecord::g_abilityRecordEventId_ = 0;
const int32_t DEFAULT_USER_ID = 0; const int32_t DEFAULT_USER_ID = 0;
@ -136,6 +137,7 @@ std::shared_ptr<AbilityRecord> AbilityRecord::CreateAbilityRecord(const AbilityR
abilityRequest.want, abilityRequest.abilityInfo, abilityRequest.appInfo, abilityRequest.requestCode); abilityRequest.want, abilityRequest.abilityInfo, abilityRequest.appInfo, abilityRequest.requestCode);
CHECK_POINTER_AND_RETURN(abilityRecord, nullptr); CHECK_POINTER_AND_RETURN(abilityRecord, nullptr);
abilityRecord->SetUid(abilityRequest.uid); abilityRecord->SetUid(abilityRequest.uid);
abilityRecord->SetAppIndex(abilityRequest.want.GetIntParam(DLP_INDEX, 0));
if (!abilityRecord->Init()) { if (!abilityRecord->Init()) {
HILOG_ERROR("failed to init new ability record"); HILOG_ERROR("failed to init new ability record");
return nullptr; return nullptr;
@ -499,6 +501,7 @@ void AbilityRecord::SetWindowModeAndDisplayId(sptr<AbilityTransitionInfo> &info,
auto mode = want->GetIntParam(Want::PARAM_RESV_WINDOW_MODE, -1); auto mode = want->GetIntParam(Want::PARAM_RESV_WINDOW_MODE, -1);
auto displayId = want->GetIntParam(Want::PARAM_RESV_DISPLAY_ID, -1); auto displayId = want->GetIntParam(Want::PARAM_RESV_DISPLAY_ID, -1);
if (mode != -1) { if (mode != -1) {
HILOG_INFO("%{public}s: origin window mode is %{public}d.", __func__, mode);
info->mode_ = static_cast<uint32_t>(mode); info->mode_ = static_cast<uint32_t>(mode);
} }
if (displayId != -1) { if (displayId != -1) {
@ -512,6 +515,7 @@ sptr<AbilityTransitionInfo> AbilityRecord::CreateAbilityTransitionInfo(const spt
sptr<AbilityTransitionInfo> info = new AbilityTransitionInfo(); sptr<AbilityTransitionInfo> info = new AbilityTransitionInfo();
if (startOptions != nullptr) { if (startOptions != nullptr) {
info->mode_ = static_cast<uint32_t>(startOptions->GetWindowMode()); info->mode_ = static_cast<uint32_t>(startOptions->GetWindowMode());
HILOG_INFO("%{public}s: window mode is %{public}d.", __func__, info->mode_);
info->displayId_ = static_cast<uint64_t>(startOptions->GetDisplayID()); info->displayId_ = static_cast<uint64_t>(startOptions->GetDisplayID());
} else { } else {
SetWindowModeAndDisplayId(info, want); SetWindowModeAndDisplayId(info, want);
@ -526,13 +530,15 @@ sptr<AbilityTransitionInfo> AbilityRecord::CreateAbilityTransitionInfo(const Abi
sptr<AbilityTransitionInfo> info = new AbilityTransitionInfo(); sptr<AbilityTransitionInfo> info = new AbilityTransitionInfo();
auto abilityStartSetting = abilityRequest.startSetting; auto abilityStartSetting = abilityRequest.startSetting;
if (abilityStartSetting) { if (abilityStartSetting) {
int base = 10; // Numerical base (radix) that determines the valid characters and their interpretation. auto windowMode = abilityStartSetting->GetProperty(AbilityStartSetting::WINDOW_MODE_KEY);
auto mode = auto displayId = abilityStartSetting->GetProperty(AbilityStartSetting::WINDOW_DISPLAY_ID_KEY);
strtol(abilityStartSetting->GetProperty(AbilityStartSetting::WINDOW_MODE_KEY).c_str(), nullptr, base); try {
info->mode_ = static_cast<uint32_t>(mode); info->mode_ = static_cast<uint32_t>(std::stoi(windowMode));
auto displayId = info->displayId_ = static_cast<uint64_t>(std::stoi(displayId));
strtol(abilityStartSetting->GetProperty(AbilityStartSetting::WINDOW_DISPLAY_ID_KEY).c_str(), nullptr, base); } catch (...) {
info->displayId_ = static_cast<uint64_t>(displayId); HILOG_WARN("windowMode: stoi(%{public}s) failed", windowMode.c_str());
HILOG_WARN("displayId: stoi(%{public}s) failed", displayId.c_str());
}
} else { } else {
SetWindowModeAndDisplayId(info, std::make_shared<Want>(abilityRequest.want)); SetWindowModeAndDisplayId(info, std::make_shared<Want>(abilityRequest.want));
} }
@ -1650,14 +1656,14 @@ void AbilityRecord::SetMinimizeReason(bool fromUser)
minimizeReason_ = fromUser; minimizeReason_ = fromUser;
} }
void AbilityRecord::SetDlp(bool isDlp) void AbilityRecord::SetAppIndex(const int32_t appIndex)
{ {
isDlp_ = isDlp; appIndex_ = appIndex;
} }
bool AbilityRecord::IsDlp() const int32_t AbilityRecord::GetAppIndex() const
{ {
return isDlp_; return appIndex_;
} }
bool AbilityRecord::IsMinimizeFromUser() const bool AbilityRecord::IsMinimizeFromUser() const

View File

@ -1231,7 +1231,7 @@ void MissionListManager::CompleteTerminateAndUpdateMission(const std::shared_ptr
terminateAbilityList_.remove(it); terminateAbilityList_.remove(it);
// update inner mission info time // update inner mission info time
bool excludeFromMissions = abilityRecord->GetAbilityInfo().excludeFromMissions; bool excludeFromMissions = abilityRecord->GetAbilityInfo().excludeFromMissions;
if (abilityRecord->IsDlp() || abilityRecord->GetAbilityInfo().removeMissionAfterTerminate || if ((abilityRecord->GetAppIndex() != 0) || abilityRecord->GetAbilityInfo().removeMissionAfterTerminate ||
excludeFromMissions) { excludeFromMissions) {
RemoveMissionLocked(abilityRecord->GetMissionId(), excludeFromMissions); RemoveMissionLocked(abilityRecord->GetMissionId(), excludeFromMissions);
return; return;
@ -1488,7 +1488,7 @@ void MissionListManager::UpdateMissionSnapshot(const std::shared_ptr<AbilityReco
} }
int32_t missionId = abilityRecord->GetMissionId(); int32_t missionId = abilityRecord->GetMissionId();
MissionSnapshot snapshot; MissionSnapshot snapshot;
snapshot.isPrivate = abilityRecord->IsDlp(); snapshot.isPrivate = (abilityRecord->GetAppIndex() != 0);
DelayedSingleton<MissionInfoMgr>::GetInstance()->UpdateMissionSnapshot(missionId, abilityRecord->GetToken(), DelayedSingleton<MissionInfoMgr>::GetInstance()->UpdateMissionSnapshot(missionId, abilityRecord->GetToken(),
snapshot); snapshot);
if (listenerController_) { if (listenerController_) {
@ -1960,7 +1960,7 @@ void MissionListManager::HandleAbilityDiedByDefault(std::shared_ptr<AbilityRecor
// update running state. // update running state.
if (!ability->IsUninstallAbility()) { if (!ability->IsUninstallAbility()) {
if (ability->IsDlp() || ability->GetAbilityInfo().removeMissionAfterTerminate || if ((ability->GetAppIndex() != 0) || ability->GetAbilityInfo().removeMissionAfterTerminate ||
ability->GetAbilityInfo().excludeFromMissions) { ability->GetAbilityInfo().excludeFromMissions) {
RemoveMissionLocked(mission->GetMissionId(), ability->GetAbilityInfo().excludeFromMissions); RemoveMissionLocked(mission->GetMissionId(), ability->GetAbilityInfo().excludeFromMissions);
} else { } else {