From d4d8928e92c494daa6c6e52339aba74b9db98fe2 Mon Sep 17 00:00:00 2001 From: jerry Date: Fri, 7 Jan 2022 12:16:34 +0000 Subject: [PATCH] fixed 1737233 from https://gitee.com/littlejerry1/aafwk_standard/pulls/259 sijunjie@huawei.com Signed-off-by: jerry Change-Id: I8e24f3b1b73e947490ea1924142265fa27a45b40 --- .../include/ability_manager_interface.h | 11 +++++ .../include/user_stop_callback.h | 35 ++++++++++++++ .../include/ability_manager_proxy.h | 4 ++ .../include/ability_manager_service.h | 4 ++ .../abilitymgr/include/ability_manager_stub.h | 2 + .../abilitymgr/src/ability_manager_proxy.cpp | 48 +++++++++++++++++++ .../src/ability_manager_service.cpp | 12 +++++ .../abilitymgr/src/ability_manager_stub.cpp | 25 ++++++++++ 8 files changed, 141 insertions(+) create mode 100644 interfaces/innerkits/ability_manager/include/user_stop_callback.h diff --git a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h index a8f5da730a6..f3c438114e2 100644 --- a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h +++ b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h @@ -41,6 +41,7 @@ #include "mission_listener_interface.h" #include "mission_info.h" #include "start_options.h" +#include "user_stop_callback.h" namespace OHOS { namespace AAFwk { @@ -527,6 +528,10 @@ public: virtual int MoveMissionToFront(int32_t missionId) = 0; + virtual int StartUser(int userId) = 0; + + virtual int StopUser(int userId, const sptr &callback) = 0; + enum { // ipc id 1-1000 for kit // ipc id for terminating ability (1) @@ -673,6 +678,12 @@ public: // ipc id for get mission snap shot (48) GET_MISSION_SNAPSHOT_BY_ID, + // ipc id for move mission to front (49) + START_USER, + + // ipc id for move mission to front (49) + STOP_USER, + // ipc id 1001-2000 for DMS // ipc id for starting ability (1001) START_ABILITY = 1001, diff --git a/interfaces/innerkits/ability_manager/include/user_stop_callback.h b/interfaces/innerkits/ability_manager/include/user_stop_callback.h new file mode 100644 index 00000000000..4a808a15283 --- /dev/null +++ b/interfaces/innerkits/ability_manager/include/user_stop_callback.h @@ -0,0 +1,35 @@ +/* + * 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_AAFWK_USER_STOP_CALLBACK_H +#define OHOS_AAFWK_USER_STOP_CALLBACK_H + +#include "iremote_broker.h" + +namespace OHOS { +namespace AAFwk { +/** + * @class IUserStopCallback + * user stop callback. + */ +class IUserStopCallback : public OHOS::IRemoteBroker { +public: + DECLARE_INTERFACE_DESCRIPTOR(u"ohos.aafwk.UserStopCallback"); + + virtual void OnStopUserDone(int userId, int errcode) = 0; +}; +} // namespace AAFwk +} // namespace OHOS +#endif // OHOS_AAFWK_USER_STOP_CALLBACK_H \ No newline at end of file diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index ee5d9280300..5011c9a84df 100644 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -510,6 +510,10 @@ public: virtual int MoveMissionToFront(int32_t missionId) override; + virtual int StartUser(int userId) override; + + virtual int StopUser(int userId, const sptr &callback) override; + private: template int GetParcelableInfos(MessageParcel &reply, std::vector &parcelableInfos); diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 78dfd75dc91..5ba57bfff20 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -646,6 +646,10 @@ public: */ sptr GetAbilityTokenByMissionId(int32_t missionId); + virtual int StartUser(int userId) override; + + virtual int StopUser(int userId, const sptr &callback) override; + // MSG 0 - 20 represents timeout message static constexpr uint32_t LOAD_TIMEOUT_MSG = 0; static constexpr uint32_t ACTIVE_TIMEOUT_MSG = 1; diff --git a/services/abilitymgr/include/ability_manager_stub.h b/services/abilitymgr/include/ability_manager_stub.h index 13ed51dd0ea..fbb6e82b538 100644 --- a/services/abilitymgr/include/ability_manager_stub.h +++ b/services/abilitymgr/include/ability_manager_stub.h @@ -118,6 +118,8 @@ private: int CleanMissionInner(MessageParcel &data, MessageParcel &reply); int CleanAllMissionsInner(MessageParcel &data, MessageParcel &reply); int MoveMissionToFrontInner(MessageParcel &data, MessageParcel &reply); + int StartUserInner(MessageParcel &data, MessageParcel &reply); + int StopUserInner(MessageParcel &data, MessageParcel &reply); using RequestFuncType = int (AbilityManagerStub::*)(MessageParcel &data, MessageParcel &reply); std::map requestFuncMap_; diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index 60313aafca6..f8fc48ead8f 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -1776,5 +1776,53 @@ int AbilityManagerProxy::MoveMissionToFront(int32_t missionId) } return reply.ReadInt32(); } + +int AbilityManagerProxy::StartUser(int userId) +{ + int error; + MessageParcel data; + MessageParcel reply; + MessageOption option; + + if (!WriteInterfaceToken(data)) { + return INNER_ERR; + } + if (!data.WriteInt32(userId)) { + HILOG_ERROR("StartUser:WriteInt32 fail."); + return ERR_INVALID_VALUE; + } + error = Remote()->SendRequest(IAbilityManager::START_USER, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("StartUser:SendRequest error: %d", error); + return error; + } + return reply.ReadInt32(); +} + +int AbilityManagerProxy::StopUser(int userId, const sptr &callback) +{ + int error; + MessageParcel data; + MessageParcel reply; + MessageOption option; + + if (!WriteInterfaceToken(data)) { + return INNER_ERR; + } + if (!data.WriteInt32(userId)) { + HILOG_ERROR("StopUser:WriteInt32 fail."); + return ERR_INVALID_VALUE; + } + if (!data.WriteParcelable(callback->AsObject())) { + HILOG_ERROR("StopUser:write IUserStopCallback fail."); + return ERR_INVALID_VALUE; + } + error = Remote()->SendRequest(IAbilityManager::STOP_USER, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("StopUser:SendRequest error: %d", error); + return error; + } + return reply.ReadInt32(); +} } // namespace AAFwk } // namespace OHOS \ No newline at end of file diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 18f53265096..086d050dc47 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -2438,5 +2438,17 @@ void AbilityManagerService::StartingSettingsDataAbility() want.SetElementName(AbilityConfig::SETTINGS_DATA_BUNDLE_NAME, AbilityConfig::SETTINGS_DATA_ABILITY_NAME); (void)StartAbility(want, DEFAULT_INVAL_VALUE); } + +int AbilityManagerService::StartUser(int userId) +{ + HILOG_DEBUG("%{public}s", __func__); + return 0; +} + +int AbilityManagerService::StopUser(int userId, const sptr &callback) +{ + HILOG_DEBUG("%{public}s", __func__); + return 0; +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index 6b5b6ea239b..62ed8266364 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -116,6 +116,8 @@ void AbilityManagerStub::SecondStepInit() requestFuncMap_[CLEAN_MISSION] = &AbilityManagerStub::CleanMissionInner; requestFuncMap_[CLEAN_ALL_MISSIONS] = &AbilityManagerStub::CleanAllMissionsInner; requestFuncMap_[MOVE_MISSION_TO_FRONT] = &AbilityManagerStub::MoveMissionToFrontInner; + requestFuncMap_[START_USER] = &AbilityManagerStub::StartUserInner; + requestFuncMap_[STOP_USER] = &AbilityManagerStub::StopUserInner; } int AbilityManagerStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) @@ -1049,5 +1051,28 @@ int AbilityManagerStub::MoveMissionToFrontInner(MessageParcel &data, MessageParc } return NO_ERROR; } + +int AbilityManagerStub::StartUserInner(MessageParcel &data, MessageParcel &reply) +{ + int32_t userId = data.ReadInt32(); + int result = StartUser(userId); + if (!reply.WriteInt32(result)) { + HILOG_ERROR("StartUser failed."); + return ERR_INVALID_VALUE; + } + return NO_ERROR; +} + +int AbilityManagerStub::StopUserInner(MessageParcel &data, MessageParcel &reply) +{ + int32_t userId = data.ReadInt32(); + auto callback = iface_cast(data.ReadParcelable()); + int result = StopUser(userId, callback); + if (!reply.WriteInt32(result)) { + HILOG_ERROR("StopUser failed."); + return ERR_INVALID_VALUE; + } + return NO_ERROR; +} } // namespace AAFwk } // namespace OHOS -- Gitee