diff options
7 files changed, 37 insertions, 0 deletions
diff --git a/cm/lib/main/java/org/cyanogenmod/platform/internal/CMStatusBarManagerService.java b/cm/lib/main/java/org/cyanogenmod/platform/internal/CMStatusBarManagerService.java index ee913ed..5905836 100644 --- a/cm/lib/main/java/org/cyanogenmod/platform/internal/CMStatusBarManagerService.java +++ b/cm/lib/main/java/org/cyanogenmod/platform/internal/CMStatusBarManagerService.java @@ -83,6 +83,12 @@ public class CMStatusBarManagerService extends SystemService { @Override public void onStart() { + if (!mContext.getPackageManager().hasSystemFeature( + CMContextConstants.Features.STATUSBAR)) { + Log.wtf(TAG, "CM statusbar service started by system server but feature xml not" + + " declared. Not publishing binder service!"); + return; + } Log.d(TAG, "registerCMStatusBar cmstatusbar: " + this); mCustomTileListeners = new CustomTileListeners(); publishBinderService(CMContextConstants.CM_STATUS_BAR_SERVICE, mService); diff --git a/src/java/cyanogenmod/app/CMContextConstants.java b/src/java/cyanogenmod/app/CMContextConstants.java index 957f33c..761ce09 100644 --- a/src/java/cyanogenmod/app/CMContextConstants.java +++ b/src/java/cyanogenmod/app/CMContextConstants.java @@ -125,5 +125,13 @@ public final class CMContextConstants { */ @SdkConstant(SdkConstant.SdkConstantType.FEATURE) public static final String HARDWARE_ABSTRACTION = "org.cyanogenmod.hardware"; + + /** + * Feature for {@link PackageManager#getSystemAvailableFeatures} and + * {@link PackageManager#hasSystemFeature}: The device includes the cm status bar service + * utilzed by the cmsdk. + */ + @SdkConstant(SdkConstant.SdkConstantType.FEATURE) + public static final String STATUSBAR = "org.cyanogenmod.statusbar"; } } diff --git a/src/java/cyanogenmod/app/CMStatusBarManager.java b/src/java/cyanogenmod/app/CMStatusBarManager.java index efc841c..d696a82 100644 --- a/src/java/cyanogenmod/app/CMStatusBarManager.java +++ b/src/java/cyanogenmod/app/CMStatusBarManager.java @@ -65,6 +65,13 @@ public class CMStatusBarManager { mContext = context; } sService = getService(); + + if (context.getPackageManager().hasSystemFeature( + cyanogenmod.app.CMContextConstants.Features.STATUSBAR) && sService == null) { + throw new RuntimeException("Unable to get CMStatusBarService. The service either" + + " crashed, was not started, or the interface has been called to early in" + + " SystemServer init"); + } } /** diff --git a/tests/src/org/cyanogenmod/tests/customtiles/unit/CMStatusBarManagerTest.java b/tests/src/org/cyanogenmod/tests/customtiles/unit/CMStatusBarManagerTest.java index 67e311c..69e9742 100644 --- a/tests/src/org/cyanogenmod/tests/customtiles/unit/CMStatusBarManagerTest.java +++ b/tests/src/org/cyanogenmod/tests/customtiles/unit/CMStatusBarManagerTest.java @@ -19,6 +19,7 @@ package org.cyanogenmod.tests.customtiles.unit; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; +import cyanogenmod.app.CMContextConstants; import cyanogenmod.app.CMStatusBarManager; import cyanogenmod.app.ICMStatusBarManager; @@ -31,6 +32,9 @@ public class CMStatusBarManagerTest extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); + // Only run this if we support cm status bar service + org.junit.Assume.assumeTrue(mContext.getPackageManager().hasSystemFeature( + CMContextConstants.Features.STATUSBAR)); mCMStatusBarManager = CMStatusBarManager.getInstance(mContext); } diff --git a/tests/src/org/cyanogenmod/tests/customtiles/unit/CustomTileBuilderTest.java b/tests/src/org/cyanogenmod/tests/customtiles/unit/CustomTileBuilderTest.java index 5d20136..544089d 100644 --- a/tests/src/org/cyanogenmod/tests/customtiles/unit/CustomTileBuilderTest.java +++ b/tests/src/org/cyanogenmod/tests/customtiles/unit/CustomTileBuilderTest.java @@ -24,6 +24,7 @@ import android.net.Uri; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; +import cyanogenmod.app.CMContextConstants; import cyanogenmod.app.CustomTile; import org.cyanogenmod.tests.R; import org.cyanogenmod.tests.customtiles.CMStatusBarTest; @@ -39,6 +40,9 @@ public class CustomTileBuilderTest extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); + // Only run this if we support cm status bar service + org.junit.Assume.assumeTrue(mContext.getPackageManager().hasSystemFeature( + CMContextConstants.Features.STATUSBAR)); } @SmallTest diff --git a/tests/src/org/cyanogenmod/tests/customtiles/unit/CustomTileTest.java b/tests/src/org/cyanogenmod/tests/customtiles/unit/CustomTileTest.java index ca04f56..3863453 100644 --- a/tests/src/org/cyanogenmod/tests/customtiles/unit/CustomTileTest.java +++ b/tests/src/org/cyanogenmod/tests/customtiles/unit/CustomTileTest.java @@ -25,6 +25,7 @@ import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; import android.widget.RemoteViews; +import cyanogenmod.app.CMContextConstants; import cyanogenmod.app.CustomTile; import org.cyanogenmod.tests.R; @@ -39,6 +40,9 @@ public class CustomTileTest extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); + // Only run this if we support cm status bar service + org.junit.Assume.assumeTrue(mContext.getPackageManager().hasSystemFeature( + CMContextConstants.Features.STATUSBAR)); } @SmallTest diff --git a/tests/src/org/cyanogenmod/tests/customtiles/unit/StatusBarPanelCustomTileTest.java b/tests/src/org/cyanogenmod/tests/customtiles/unit/StatusBarPanelCustomTileTest.java index 537622f..6b22f38 100644 --- a/tests/src/org/cyanogenmod/tests/customtiles/unit/StatusBarPanelCustomTileTest.java +++ b/tests/src/org/cyanogenmod/tests/customtiles/unit/StatusBarPanelCustomTileTest.java @@ -25,6 +25,7 @@ import android.os.UserHandle; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; +import cyanogenmod.app.CMContextConstants; import cyanogenmod.app.CustomTile; import cyanogenmod.app.StatusBarPanelCustomTile; import org.cyanogenmod.tests.R; @@ -39,6 +40,9 @@ public class StatusBarPanelCustomTileTest extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); + // Only run this if we support cm status bar service + org.junit.Assume.assumeTrue(mContext.getPackageManager().hasSystemFeature( + CMContextConstants.Features.STATUSBAR)); } @SmallTest |