diff --git a/cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java b/cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java
index 7031bd7..bfae235 100644
--- a/cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java
+++ b/cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java
@@ -16,7 +16,7 @@
package org.cyanogenmod.platform.internal;
import android.content.Context;
-import android.content.pm.PackageManager;
+import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
@@ -347,6 +347,16 @@ public class CMHardwareService extends SystemService implements ThermalUpdateCal
publishBinderService(CMContextConstants.CM_HARDWARE_SERVICE, mService);
}
+ @Override
+ public void onBootPhase(int phase) {
+ if (phase == PHASE_BOOT_COMPLETED) {
+ Intent intent = new Intent(cyanogenmod.content.Intent.ACTION_INITIALIZE_CM_HARDWARE);
+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+ mContext.sendBroadcast(intent,
+ cyanogenmod.platform.Manifest.permission.HARDWARE_ABSTRACTION_ACCESS);
+ }
+ }
+
@Override
public void onStart() {
if (ThermalMonitor.isSupported()) {
diff --git a/cm/res/AndroidManifest.xml b/cm/res/AndroidManifest.xml
index 63354ef..b301559 100644
--- a/cm/res/AndroidManifest.xml
+++ b/cm/res/AndroidManifest.xml
@@ -23,6 +23,7 @@
android:sharedUserLabel="@string/cyanogenmod_system_label">
+
diff --git a/src/java/cyanogenmod/content/Intent.java b/src/java/cyanogenmod/content/Intent.java
index ecc4877..5a1f612 100644
--- a/src/java/cyanogenmod/content/Intent.java
+++ b/src/java/cyanogenmod/content/Intent.java
@@ -77,4 +77,15 @@ public class Intent {
public static final String ACTION_SCREEN_CAMERA_GESTURE =
"cyanogenmod.intent.action.SCREEN_CAMERA_GESTURE";
+ /**
+ * Broadcast action: perform any initialization required for CMHW services.
+ * Runs when the service receives the signal the device has booted, but
+ * should happen before {@link android.content.Intent#ACTION_BOOT_COMPLETED}.
+ *
+ * Requires {@link cyanogenmod.platform.Manifest.permission#HARDWARE_ABSTRACTION_ACCESS}.
+ * @hide
+ */
+ public static final String ACTION_INITIALIZE_CM_HARDWARE =
+ "cyanogenmod.intent.action.INITIALIZE_CM_HARDWARE";
+
}