summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2017-10-19 01:46:44 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-10-19 01:46:44 +0000
commit17e973595540e8432d195ee21cba177ef0b15bb4 (patch)
tree95d5c0c1288d8a34ca98cdf7befacaa466d04e24
parent169dddf8163a4ad7616cef65edcf35b031ade0cf (diff)
parentedfcb00fda47a0959733e8ee52363963f68bb296 (diff)
Merge "Add config resource to specify device specific services"
-rw-r--r--core/res/res/values/config.xml4
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--services/core/java/com/android/server/SystemService.java5
-rw-r--r--services/java/com/android/server/SystemServer.java19
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;