diff --git a/services/abilitymgr/include/ability_config.h b/services/abilitymgr/include/ability_config.h index 58cd30018bed6186a57b495870be1267f543aea6..8f1c5da51114dcc37253733716eb0e42c11d63dc 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.callui"; +const std::string PHONE_SERVICE_ABILITY_NAME = "com.ohos.callui.ServiceAbility"; } // namespace AbilityConfig } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/include/ams_configuration_parameter.h b/services/abilitymgr/include/ams_configuration_parameter.h index 445f5c416fcea17780cd3ce8b07a144e56e386d7..7ad840cbad266824a3c7e9f08a0776d2745c25cf 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_LUNCHER {"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 canStartLuncher {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 bb9c9791697971d79c38d97c7e54f2f3125a4d6f..8fe359a9ecbb48685b61ccdb748c103df9edd0ca 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -1075,6 +1075,26 @@ 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 +1544,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 137ad2a0437cc199544699d5f6f40253e36f582e..536ce39e972299339dcb57b537b7c0a4c53281c1 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 ...");