diff --git a/services/abilitymgr/include/ability_config.h b/services/abilitymgr/include/ability_config.h index 58cd30018bed6186a57b495870be1267f543aea6..b69a2deb4a28c4d0b5de0a35e3345620d37810a4 100644 --- a/services/abilitymgr/include/ability_config.h +++ b/services/abilitymgr/include/ability_config.h @@ -46,6 +46,9 @@ const std::string FLOATING_WINDOW_PERMISSION = "ohos.permission.SYSTEM_FLOAT_WIN const std::string LAUNCHER_ABILITY_NAME = "com.ohos.launcher.MainAbility"; const std::string LAUNCHER_BUNDLE_NAME = "com.ohos.launcher"; + +const std::string PHONE_SERVICE_BUNDLE_NAME = "com.ohos.phoneservice"; +const std::string PHONE_SERVICE_ABILITY_NAME = "com.ohos.phoneservice.ServiceAbility"; } // namespace AbilityConfig } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 38a3803ff918f2bdf1053b63ec6c4ec3e153f297..ea4985711ac68892856b575a83cb8a3ce8eeee98 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -575,6 +575,12 @@ private: */ void StartingLauncherAbility(); + /** + * starting phone service ability. + * + */ + void StartingPhoneServiceAbility(); + /** * starting system ui abilites. * diff --git a/services/abilitymgr/include/ams_configuration_parameter.h b/services/abilitymgr/include/ams_configuration_parameter.h index b3c487168028244c8dc2a30d50831edc9dc6a534..2ec58139436137d2da1746ebd62a28305be82a1b 100644 --- a/services/abilitymgr/include/ams_configuration_parameter.h +++ b/services/abilitymgr/include/ams_configuration_parameter.h @@ -27,6 +27,7 @@ const std::string SERVICE_ITEM_AMS {"service_startup_config"}; const std::string STARTUP_LAUNCHER {"startup_launcher"}; const std::string STARTUP_STATUS_BAR {"startup_system_ui_status_bar"}; const std::string STARTUP_NAVIGATION_BAR {"startup_system_ui_navigation_bar"}; +const std::string STARTUP_PHONE_SERVICE{"startup_phone_service"}; } // namespace AmsConfig enum class SatrtUiMode { STATUSBAR = 1, NAVIGATIONBAR = 2, STARTUIBOTH = 3 }; @@ -55,6 +56,11 @@ public: * return false : ams do not start system ui navigation bar */ bool GetNavigationBarState() const; + /** + * return true : ams can start phone service + * return false : ams do not start phone service + */ + bool GetPhoneServiceState() const; /** * Get profile information */ @@ -74,6 +80,7 @@ private: bool canStartLauncher {false}; bool canStartUiStatusBar {false}; bool canStartUiNavigationBar {false}; + bool canStartPhoneService{false}; }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/resource/ams_service_config.json b/services/abilitymgr/resource/ams_service_config.json index 0dd3ebfb965c0a7aa888f276d5bf1ecc6f588d41..5447a58d7c1c75fe7c8912d30368690a5ad7d30a 100644 --- a/services/abilitymgr/resource/ams_service_config.json +++ b/services/abilitymgr/resource/ams_service_config.json @@ -2,7 +2,8 @@ "service_startup_config":{ "startup_launcher":true, "startup_system_ui_status_bar" : true, - "startup_system_ui_navigation_bar" : true + "startup_system_ui_navigation_bar" : true, + "startup_phone_service" : true } } diff --git a/services/abilitymgr/src/ability_connect_manager.cpp b/services/abilitymgr/src/ability_connect_manager.cpp index 47ded6218847142318f68e0f75c953a5a2565247..dfa7ea42de45bc51a9e3f43d2c9d1d3bc4988be8 100644 --- a/services/abilitymgr/src/ability_connect_manager.cpp +++ b/services/abilitymgr/src/ability_connect_manager.cpp @@ -841,6 +841,17 @@ void AbilityConnectManager::HandleAbilityDiedTask(const std::shared_ptrGetAbilityInfo().name == AbilityConfig::PHONE_SERVICE_ABILITY_NAME) { + AbilityRequest requestInfo; + requestInfo.want = abilityRecord->GetWant(); + requestInfo.abilityInfo = abilityRecord->GetAbilityInfo(); + requestInfo.appInfo = abilityRecord->GetApplicationInfo(); + + RemoveServiceAbility(abilityRecord); + StartAbilityLocked(requestInfo); + return; + } + ConnectListType connlist = abilityRecord->GetConnectRecordList(); for (auto &connectRecord : connlist) { HILOG_WARN("This record complete disconnect directly. recordId:%{public}d", connectRecord->GetRecordId()); diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 0921f701a43f8eef8adab2fc3336de1a64db9023..da3b3e07a4c5abf1c348f2569b3fb9f65723956a 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -1075,6 +1075,27 @@ void AbilityManagerService::StartingLauncherAbility() return; } +void AbilityManagerService::StartingPhoneServiceAbility() +{ + HILOG_DEBUG("%{public}s", __func__); + if (!iBundleManager_) { + HILOG_INFO("bms service is null"); + return; + } + + AppExecFwk::AbilityInfo phoneServiceInfo; + Want phoneServiceWant; + phoneServiceWant.SetElementName(AbilityConfig::PHONE_SERVICE_BUNDLE_NAME, + AbilityConfig::PHONE_SERVICE_ABILITY_NAME); + + while (!(iBundleManager_->QueryAbilityInfo(phoneServiceWant, phoneServiceInfo))) { + HILOG_INFO("Waiting query phone service completed."); + usleep(REPOLL_TIME_MICRO_SECONDS); + } + + (void)StartAbility(phoneServiceWant, DEFAULT_INVAL_VALUE); +} + void AbilityManagerService::StartSystemUi(const std::string abilityName) { HILOG_INFO("Starting system ui app."); @@ -1524,6 +1545,11 @@ void AbilityManagerService::StartSystemApplication() HILOG_INFO("start navigation bar"); StartingSystemUiAbility(SatrtUiMode::NAVIGATIONBAR); } + + if (amsConfigResolver_->GetPhoneServiceState()) { + HILOG_INFO("start phone service"); + StartingPhoneServiceAbility(); + } } void AbilityManagerService::ConnectBmsService() diff --git a/services/abilitymgr/src/ams_configuration_parameter.cpp b/services/abilitymgr/src/ams_configuration_parameter.cpp index 9f6c383cf6a2cc61fc79398ae8f6efa2c5f44610..5f2ccb4aca7554d0fb1e7652b44031e9bae85d4e 100644 --- a/services/abilitymgr/src/ams_configuration_parameter.cpp +++ b/services/abilitymgr/src/ams_configuration_parameter.cpp @@ -41,6 +41,11 @@ bool AmsConfigurationParameter::GetNavigationBarState() const return canStartUiNavigationBar; } +bool AmsConfigurationParameter::GetPhoneServiceState() const +{ + return canStartPhoneService; +} + bool AmsConfigurationParameter::NonConfigFile() const { return nonConfigFile; @@ -72,6 +77,7 @@ int AmsConfigurationParameter::LoadAmsConfiguration(const std::string &filePath) canStartUiStatusBar = amsJson.at(AmsConfig::SERVICE_ITEM_AMS).at(AmsConfig::STARTUP_STATUS_BAR).get(); canStartUiNavigationBar = amsJson.at(AmsConfig::SERVICE_ITEM_AMS).at(AmsConfig::STARTUP_NAVIGATION_BAR).get(); + canStartPhoneService = amsJson.at(AmsConfig::SERVICE_ITEM_AMS).at(AmsConfig::STARTUP_PHONE_SERVICE).get(); HILOG_INFO("get ams service config succes!"); } else { HILOG_INFO("json no have service item ...");