diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/common/utils/constant.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/common/utils/constant.ets index feae6cd0e73d0de1231b437391649f90e486f42a..1bfa23125625a0a3ff173eceef2f590ae786bbd1 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/common/utils/constant.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/common/utils/constant.ets @@ -344,5 +344,6 @@ export default class Constants { // static INITIAL_INDEX = 10 + static ACCESS_TOKEN = 'ohos.security.accesstoken.tokencallback' } \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/pages/dialogPlus.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/pages/dialogPlus.ets index f833b2b938c38f0016918f47932b60acf817db7a..240dea5283a51c7bdf95a486dbb53ebf9cb73a2c 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/pages/dialogPlus.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/pages/dialogPlus.ets @@ -150,18 +150,16 @@ struct dialogPlusPage { let option = new rpc.MessageOption() let data = new rpc.MessageParcel() let reply = new rpc.MessageParcel() - if(!data.writeStringArray(perms)) { - Log.error('writeStringArray permission failed!') + Promise.all([data.writeInterfaceToken(Constants.ACCESS_TOKEN), + data.writeStringArray(perms), + data.writeIntArray(results) + ]).then(() => { + this.proxy.sendRequest(Constants.RESULT_CODE, data, reply, option) this.destruction() - return - } - if (!data.writeIntArray(results)) { - Log.error('writeIntArray result failed!') + }).catch(() => { + Log.error('write result failed!') this.destruction() - return - } - this.proxy.sendRequest(Constants.RESULT_CODE, data, reply, option) - this.destruction() + }) } destruction() { diff --git a/interfaces/innerkits/token_callback/src/token_callback_stub.cpp b/interfaces/innerkits/token_callback/src/token_callback_stub.cpp index 1d70b043ee9b388d3d2b8e80c7f6f9cf6ca7c1e8..e51cd4c87201e505268343a76c98fd043f541973 100644 --- a/interfaces/innerkits/token_callback/src/token_callback_stub.cpp +++ b/interfaces/innerkits/token_callback/src/token_callback_stub.cpp @@ -29,6 +29,11 @@ static const int32_t LIST_SIZE_MAX = 200; static const int32_t FAILED = -1; } +static std::string to_utf8(std::u16string str16) +{ + return std::wstring_convert, char16_t> {}.to_bytes(str16); +} + int32_t TokenCallbackStub::OnRemoteRequest( uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) { @@ -43,18 +48,19 @@ int32_t TokenCallbackStub::OnRemoteRequest( if (msgCode == ITokenCallback::GRANT_RESULT_CALLBACK) { uint32_t permListSize = data.ReadUint32(); if (permListSize > LIST_SIZE_MAX) { - ACCESSTOKEN_LOG_ERROR(LABEL, "read permListSize fail"); + ACCESSTOKEN_LOG_ERROR(LABEL, "read permListSize fail %{public}u", permListSize); return FAILED; } std::vector permList; for (uint32_t i = 0; i < permListSize; i++) { - std::string perm = data.ReadString(); + std::u16string u16Perm = data.ReadString16(); + std::string perm = to_utf8(u16Perm); permList.emplace_back(perm); } uint32_t statusListSize = data.ReadUint32(); if (statusListSize != permListSize) { - ACCESSTOKEN_LOG_ERROR(LABEL, "read permListSize fail"); + ACCESSTOKEN_LOG_ERROR(LABEL, "read statusListSize fail %{public}u", statusListSize); return FAILED; } std::vector grantResults;