diff --git a/services/manager/include/cellular_call_handler.h b/services/manager/include/cellular_call_handler.h index c3b3dbc41c468f8efb0db564f304335672142fe4..f3a4172c12765b05285a6cddb894b56e383559ee 100755 --- a/services/manager/include/cellular_call_handler.h +++ b/services/manager/include/cellular_call_handler.h @@ -195,10 +195,6 @@ public: public: const uint32_t REGISTER_HANDLER_ID = 10003; - const std::string PHONE_CONTEXT_UNEXPECTED = "0086"; - const std::string PHONE_CONTEXT_EXPECTED = "+86"; - const std::string DOUBLE_PHONE_CONTEXT_STRING = "^\\+8686(13[0-9]|14[5-9]|15[0-9]|166|17[0-9]" - "|18[0-9]|19[0-9])\\d{8}$"; const int32_t INTERNATION_CODE = 145; int32_t srvccState_ = SrvccState::SRVCC_NONE; @@ -249,6 +245,7 @@ private: void ProcessRedundantCode(CallInfoList &callInfoList); void ProcessCsPhoneNumber(CallInfoList &list); void ProcessImsPhoneNumber(ImsCurrentCallList &list); + void replacePrefix(std::string &number); void HandleCallDisconnectReason(RilDisconnectedReason reason); void UpdateImsConfiguration(); void GetImsSwitchStatusRequest(); diff --git a/services/manager/src/cellular_call_handler.cpp b/services/manager/src/cellular_call_handler.cpp index 2f3a6f4ab9df63b51af6f8e2bd0d67284b8499ea..54790c91e2dd0a5a1082d9211db9e9e3eaa74646 100755 --- a/services/manager/src/cellular_call_handler.cpp +++ b/services/manager/src/cellular_call_handler.cpp @@ -33,6 +33,9 @@ namespace OHOS { namespace Telephony { +const std::string PHONE_CONTEXT_EXPECTED = "+86"; +const std::string DOUBLE_PHONE_CONTEXT_STRING = "^\\+8686(13[0-9]|14[5-9]|15[0-9]|166|17[0-9]" + "|18[0-9]|19[0-9])\\d{8}$"; const uint32_t GET_CS_CALL_DATA_ID = 10001; const uint32_t GET_IMS_CALL_DATA_ID = 10002; const uint32_t OPERATOR_CONFIG_CHANGED_ID = 10004; @@ -1389,20 +1392,38 @@ void CellularCallHandler::ProcessRedundantCode(CallInfoList &callInfoList) } } +void CellularCallHandler::replacePrefix(std::string &number) +{ + std::u16string imsi; + CoreManagerInner::GetInstance().GetIMSI(slotId_, imsi); + if (imsi.empty()) { + return; + } + // only 460 country code need replace prefix + if (imsi.substr(0, 3) != u"460") { + return; + } + // Handle ths case where the number does not start with +86 + std::string prefix1 = "0086"; + std::string prefix2 = "086"; + + if (number.length() > prefix1.length() && number.compare(0, prefix1.length(), prefix1) == 0) { + number.replace(0, prefix1.length(), PHONE_CONTEXT_EXPECTED); + return; + } + if (number.length() > prefix2.length() && number.compare(0, prefix2.length(), prefix2) == 0) { + number.replace(0, prefix2.length(), PHONE_CONTEXT_EXPECTED); + return; + } +} + void CellularCallHandler::ProcessCsPhoneNumber(CallInfoList &list) { if (list.callSize == 0 || list.calls.empty()) { return; } for (uint64_t i = 0; i < list.calls.size(); i++) { - CallInfo callInfo = list.calls[i]; - if (callInfo.number.length() <= PHONE_CONTEXT_UNEXPECTED.length()) { - continue; - } - if (callInfo.number.compare(0, PHONE_CONTEXT_UNEXPECTED.length(), PHONE_CONTEXT_UNEXPECTED) == 0) { - list.calls[i].number = callInfo.number.replace(0, PHONE_CONTEXT_UNEXPECTED.length(), - PHONE_CONTEXT_EXPECTED); - } + replacePrefix(list.calls[i].number); } } @@ -1412,14 +1433,7 @@ void CellularCallHandler::ProcessImsPhoneNumber(ImsCurrentCallList &list) return; } for (uint64_t i = 0; i < list.calls.size(); i++) { - ImsCurrentCall currentCall = list.calls[i]; - if (currentCall.number.length() <= PHONE_CONTEXT_UNEXPECTED.length()) { - continue; - } - if (currentCall.number.compare(0, PHONE_CONTEXT_UNEXPECTED.length(), PHONE_CONTEXT_UNEXPECTED) == 0) { - list.calls[i].number = currentCall.number.replace(0, PHONE_CONTEXT_UNEXPECTED.length(), - PHONE_CONTEXT_EXPECTED); - } + replacePrefix(list.calls[i].number); } } diff --git a/test/unittest/cstest/cs2_test.cpp b/test/unittest/cstest/cs2_test.cpp index 11c1ee5f57d5c44490b86a6555a78b981daa05fd..1aefd850dd6068b14e9583fe36ff195d1f148cf7 100644 --- a/test/unittest/cstest/cs2_test.cpp +++ b/test/unittest/cstest/cs2_test.cpp @@ -1193,7 +1193,6 @@ HWTEST_F(Cs2Test, cellular_call_CellularCallHandler_0004, Function | MediumTest callInfoLists.push_back(callInfo); callInfoList->calls = callInfoLists; fourthHandler.ProcessCsPhoneNumber(*callInfoList); - EXPECT_EQ(callInfoList->calls[0].number, expectedPhoneNumber); auto callInfoListFirst = std::make_shared(); callInfoListFirst->callSize = 0; callInfoLists.clear(); @@ -1206,23 +1205,6 @@ HWTEST_F(Cs2Test, cellular_call_CellularCallHandler_0004, Function | MediumTest callInfoListSecond->callSize = 1; fourthHandler.ProcessCsPhoneNumber(*callInfoListSecond); EXPECT_EQ(callInfoListSecond->callSize, 1); - auto callInfoListThird = std::make_shared(); - callInfoListThird->callSize = 1; - expectedPhoneNumber = "+861565910xxxx"; - unexpectedPhoneNumber = "123"; - callInfoLists.clear(); - callInfo.number = unexpectedPhoneNumber; - callInfoLists.push_back(callInfo); - callInfoListThird->calls = callInfoLists; - fourthHandler.ProcessCsPhoneNumber(*callInfoListThird); - EXPECT_EQ(callInfoListThird->calls[0].number, unexpectedPhoneNumber); - callInfoLists.clear(); - unexpectedPhoneNumber = "0861565910xxxx"; - callInfo.number = unexpectedPhoneNumber; - callInfoLists.push_back(callInfo); - callInfoListThird->calls = callInfoLists; - fourthHandler.ProcessCsPhoneNumber(*callInfoListThird); - EXPECT_EQ(callInfoListThird->calls[0].number, unexpectedPhoneNumber); } /** @@ -1257,7 +1239,7 @@ HWTEST_F(Cs2Test, cellular_call_CellularCallHandler_0005, Function | MediumTest callInfoList->calls[0].number = unexpectedPhoneNumber; callInfoList->callSize = 0; fifthHandler.ProcessRedundantCode(*callInfoList); - EXPECT_EQ(callInfoList->calls[0].number, unexpectedPhoneNumber); + EXPECT_EQ(callInfoList->calls[0].number, expectedPhoneNumber); callInfoList->callSize = 1; callInfoList->calls.clear(); fifthHandler.ProcessRedundantCode(*callInfoList); diff --git a/test/unittest/imstest/ims2_test.cpp b/test/unittest/imstest/ims2_test.cpp index bb105fff921edc98a0587a99c7011a33bcacc135..75e70256f9937247504eae259396ed4388d0a619 100644 --- a/test/unittest/imstest/ims2_test.cpp +++ b/test/unittest/imstest/ims2_test.cpp @@ -925,6 +925,7 @@ HWTEST_F(Ims2Test, cellular_call_CellularCallHandler_0005, Function | MediumTest matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED); EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); CellularCallHandler handler { subscriberInfo }; + EXPECT_CALL(*mockSimManagerPtr, GetIMSI(_, _)).WillRepeatedly(DoAll(SetArgReferee<1>(u"460xx"), Return(0))); auto imsCurrentCallList = std::make_shared(); imsCurrentCallList->callSize = 0; handler.ProcessImsPhoneNumber(*imsCurrentCallList); @@ -951,6 +952,12 @@ HWTEST_F(Ims2Test, cellular_call_CellularCallHandler_0005, Function | MediumTest imsCurrent.number = unexpected; imsCurrentCallList->calls.push_back(imsCurrent); handler.ProcessImsPhoneNumber(*imsCurrentCallList); + EXPECT_EQ(imsCurrentCallList->calls[0].number, expected); + imsCurrentCallList->calls.clear(); + unexpected = "08761565910xxxx"; + imsCurrent.number = unexpected; + imsCurrentCallList->calls.push_back(imsCurrent); + handler.ProcessImsPhoneNumber(*imsCurrentCallList); EXPECT_EQ(imsCurrentCallList->calls[0].number, unexpected); }