diff options
| author | 2017-10-19 01:46:44 +0000 | |
|---|---|---|
| committer | 2017-10-19 01:46:44 +0000 | |
| commit | 17e973595540e8432d195ee21cba177ef0b15bb4 (patch) | |
| tree | 95d5c0c1288d8a34ca98cdf7befacaa466d04e24 | |
| parent | 169dddf8163a4ad7616cef65edcf35b031ade0cf (diff) | |
| parent | edfcb00fda47a0959733e8ee52363963f68bb296 (diff) | |
Merge "Add config resource to specify device specific services"
| -rw-r--r-- | core/res/res/values/config.xml | 4 | ||||
| -rw-r--r-- | core/res/res/values/symbols.xml | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/SystemService.java | 5 | ||||
| -rw-r--r-- | services/java/com/android/server/SystemServer.java | 19 |
4 files changed, 29 insertions, 0 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 4932a207cb0b..dec5fd9461a1 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -3124,4 +3124,8 @@ <!-- Decide whether to display 'No service' on status bar instead of 'Emergency calls only' when SIM is unready. --> <bool name="config_display_no_service_when_sim_unready">false</bool> + + <!-- Class names of device specific services inheriting com.android.server.SystemService. The + classes are instantiated in the order of the array. --> + <string-array translatable="false" name="config_deviceSpecificSystemServices"></string-array> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 260a5198365b..a42cf42cb905 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -454,6 +454,7 @@ <java-symbol type="integer" name="config_keepPreloadsMinDays" /> <java-symbol type="bool" name="config_hasPermanentDpad" /> <java-symbol type="bool" name="config_useDefaultFocusHighlight" /> + <java-symbol type="array" name="config_deviceSpecificSystemServices" /> <java-symbol type="color" name="tab_indicator_text_v4" /> diff --git a/services/core/java/com/android/server/SystemService.java b/services/core/java/com/android/server/SystemService.java index 94397d07e1a2..58731d27d97c 100644 --- a/services/core/java/com/android/server/SystemService.java +++ b/services/core/java/com/android/server/SystemService.java @@ -64,6 +64,11 @@ public abstract class SystemService { public static final int PHASE_SYSTEM_SERVICES_READY = 500; /** + * After receiving this boot phase, services can safely call into device specific services. + */ + public static final int PHASE_DEVICE_SPECIFIC_SERVICES_READY = 520; + + /** * After receiving this boot phase, services can broadcast Intents. */ public static final int PHASE_ACTIVITY_MANAGER_READY = 550; diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 49dd5285691b..b950191a6413 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -1656,6 +1656,25 @@ public final class SystemServer { mSystemServiceManager.setSafeMode(safeMode); + // Start device specific services + traceBeginAndSlog("StartDeviceSpecificServices"); + final String[] classes = mSystemContext.getResources().getStringArray( + R.array.config_deviceSpecificSystemServices); + for (final String className : classes) { + traceBeginAndSlog("StartDeviceSpecificServices " + className); + try { + mSystemServiceManager.startService(className); + } catch (Throwable e) { + reportWtf("starting " + className, e); + } + traceEnd(); + } + traceEnd(); + + traceBeginAndSlog("StartBootPhaseDeviceSpecificServicesReady"); + mSystemServiceManager.startBootPhase(SystemService.PHASE_DEVICE_SPECIFIC_SERVICES_READY); + traceEnd(); + // These are needed to propagate to the runnable below. final NetworkManagementService networkManagementF = networkManagement; final NetworkStatsService networkStatsF = networkStats; |