aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdnan Begovic <adnan@cyngn.com>2016-03-25 12:43:22 -0700
committerAdnan Begovic <adnan@cyngn.com>2016-03-25 14:16:35 -0700
commitb271dcf279d0818c01c080827141a1ac311250c2 (patch)
treea88aa74f2277294e6b3104ab99d395931d04f119
parent279ce42664be4a958e01dd41fecefbe36eaa5074 (diff)
downloadvendor_cmsdk-b271dcf279d0818c01c080827141a1ac311250c2.zip
vendor_cmsdk-b271dcf279d0818c01c080827141a1ac311250c2.tar.gz
vendor_cmsdk-b271dcf279d0818c01c080827141a1ac311250c2.tar.bz2
cmsdk: Mandate partner 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. Change-Id: Ic980225df9c115e97f7147cf043cf92bbb225f01 TICKET: CYNGNOS-2293
-rw-r--r--cm/lib/main/java/org/cyanogenmod/platform/internal/PartnerInterfaceService.java8
-rw-r--r--src/java/cyanogenmod/app/CMContextConstants.java8
-rw-r--r--src/java/cyanogenmod/app/PartnerInterface.java6
-rw-r--r--tests/src/org/cyanogenmod/tests/settings/unit/CMPartnerInterfaceTest.java5
4 files changed, 26 insertions, 1 deletions
diff --git a/cm/lib/main/java/org/cyanogenmod/platform/internal/PartnerInterfaceService.java b/cm/lib/main/java/org/cyanogenmod/platform/internal/PartnerInterfaceService.java
index a7a1daa..8810149 100644
--- a/cm/lib/main/java/org/cyanogenmod/platform/internal/PartnerInterfaceService.java
+++ b/cm/lib/main/java/org/cyanogenmod/platform/internal/PartnerInterfaceService.java
@@ -60,7 +60,13 @@ public class PartnerInterfaceService extends SystemService {
public PartnerInterfaceService(Context context) {
super(context);
mContext = context;
- publishBinderService(CMContextConstants.CM_PARTNER_INTERFACE, mService);
+ if (mContext.getPackageManager().hasSystemFeature(
+ CMContextConstants.Features.PERFORMANCE)) {
+ publishBinderService(CMContextConstants.CM_PARTNER_INTERFACE, mService);
+ } else {
+ Log.wtf(TAG, "CM partner service started by system server but feature xml not" +
+ " declared. Not publishing binder service!");
+ }
}
@Override
diff --git a/src/java/cyanogenmod/app/CMContextConstants.java b/src/java/cyanogenmod/app/CMContextConstants.java
index e34f211..e90d8ed 100644
--- a/src/java/cyanogenmod/app/CMContextConstants.java
+++ b/src/java/cyanogenmod/app/CMContextConstants.java
@@ -173,5 +173,13 @@ public final class CMContextConstants {
*/
@SdkConstant(SdkConstant.SdkConstantType.FEATURE)
public static final String PERFORMANCE = "org.cyanogenmod.performance";
+
+ /**
+ * Feature for {@link PackageManager#getSystemAvailableFeatures} and
+ * {@link PackageManager#hasSystemFeature}: The device includes the cm partner service
+ * utilized by the cmsdk.
+ */
+ @SdkConstant(SdkConstant.SdkConstantType.FEATURE)
+ public static final String PARTNER = "org.cyanogenmod.partner";
}
}
diff --git a/src/java/cyanogenmod/app/PartnerInterface.java b/src/java/cyanogenmod/app/PartnerInterface.java
index b06effd..a7661ff 100644
--- a/src/java/cyanogenmod/app/PartnerInterface.java
+++ b/src/java/cyanogenmod/app/PartnerInterface.java
@@ -83,6 +83,12 @@ public class PartnerInterface {
mContext = context;
}
sService = getService();
+ if (context.getPackageManager().hasSystemFeature(
+ CMContextConstants.Features.PARTNER) && sService == null) {
+ throw new RuntimeException("Unable to get PartnerInterfaceService. 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/settings/unit/CMPartnerInterfaceTest.java b/tests/src/org/cyanogenmod/tests/settings/unit/CMPartnerInterfaceTest.java
index ec28d0a..c1ac0de 100644
--- a/tests/src/org/cyanogenmod/tests/settings/unit/CMPartnerInterfaceTest.java
+++ b/tests/src/org/cyanogenmod/tests/settings/unit/CMPartnerInterfaceTest.java
@@ -29,6 +29,8 @@ import android.test.suitebuilder.annotation.SmallTest;
import android.provider.Settings;
import android.text.format.DateUtils;
import android.util.Log;
+
+import cyanogenmod.app.CMContextConstants;
import cyanogenmod.app.PartnerInterface;
import java.util.List;
@@ -45,6 +47,9 @@ public class CMPartnerInterfaceTest extends AndroidTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
+ // Only run this if we support partner interfaces
+ org.junit.Assume.assumeTrue(mContext.getPackageManager().hasSystemFeature(
+ CMContextConstants.Features.PARTNER));
mPartnerInterface = PartnerInterface.getInstance(getContext());
setupAirplaneModeTests();