From cdf85adde1be30ce675e8c5442ec4c21a6cd2991 Mon Sep 17 00:00:00 2001 From: Adnan Begovic Date: Tue, 15 Mar 2016 11:29:41 -0700 Subject: cmsdk: Mandate cm sb feature xml's for service implementation. The feature xml plays two roles: 1) To allow sdk interface (constructor) to throw when system service is unavailable. This allows for clearer platform development debugging. 2) To allow for simpler disambiguation of what services to instrument in a modular environment. TICKET: CYNGNOS-2289 Change-Id: Ice0ae7c45aecbb34e0ea667128b040906c46d7e7 --- src/java/cyanogenmod/app/CMContextConstants.java | 8 ++++++++ src/java/cyanogenmod/app/CMStatusBarManager.java | 7 +++++++ 2 files changed, 15 insertions(+) (limited to 'src') 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"); + } } /** -- cgit v1.1