Android_System_ANTHALService_3-1-0
diff --git a/Android.mk b/Android.mk
index f119ec0..2169f06 100644
--- a/Android.mk
+++ b/Android.mk
@@ -20,9 +20,6 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
-BT_ON_SRC_FILES := \
- src/com/dsi/ant/server/StateChangedReceiver.java
-
#
# ANT java system service
#
@@ -32,16 +29,6 @@
src/com/dsi/ant/server/IAntHal.aidl \
src/com/dsi/ant/server/IAntHalCallback.aidl
-#
-# If target board is not one that requires Bluetooth to be enabled for ANT to enable,
-# filter out files that are only needed for Bluetooth to enable when ANT is enabled.
-#
-
-ifeq ($(filter msm8610 msm8226 msm8974, $(TARGET_BOARD_PLATFORM)),)
-LOCAL_SRC_FILES := \
- $(filter-out $(BT_ON_SRC_FILES), $(LOCAL_SRC_FILES))
-endif
-
LOCAL_REQUIRED_MODULES := libantradio
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_CERTIFICATE := platform
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7e0a17e..28b95be 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -16,8 +16,8 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dsi.ant.server"
- android:versionName="3.0.1"
- android:versionCode="030001"
+ android:versionName="3.1.0"
+ android:versionCode="030100"
android:sharedUserId="android.uid.system">
<uses-sdk
@@ -49,15 +49,6 @@
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
-
- <receiver android:name="com.dsi.ant.server.StateChangedReceiver"
- android:enabled="true"
- android:exported="false"
- android:label="StateChangedReceiver">
- <intent-filter>
- <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
- </intent-filter>
- </receiver>
</application>
diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt
index d889dc7..82df96b 100644
--- a/ReleaseNotes.txt
+++ b/ReleaseNotes.txt
@@ -1,6 +1,6 @@
AntHalService - Release Notes
-v3.0.1
-2013-07-18
+v3.1.0
+2013-07-19
Copyright 2011 Dynastream Innovations
@@ -27,6 +27,12 @@
=============================================================
2. REVISION HISTORY
+v3.1.0 : 2013-07-19 : Android_System_ANTHALService_3-1-0
+
+Task
+ [ANTDROID-2035] - Remove tabs from AntService
+ [ANTDROID-1987] - Enable Bluetooth when ANT is enabled, if required by chip
+
v3.0.0 : 2013-01-17 : Android_System_ANTHALService_3-0-0
Bug
diff --git a/src/com/dsi/ant/server/AntService.java b/src/com/dsi/ant/server/AntService.java
index 388a311..1ed828f 100644
--- a/src/com/dsi/ant/server/AntService.java
+++ b/src/com/dsi/ant/server/AntService.java
@@ -46,18 +46,35 @@
public static final String ANT_SERVICE = "AntService";
+ /**
+ * Allows the application to directly configure the ANT radio through the
+ * proxy service. Malicious applications may prevent other ANT applications
+ * from connecting to ANT devices
+ */
public static final String ANT_ADMIN_PERMISSION = "com.dsi.ant.permission.ANT_ADMIN";
+ /**
+ * Request that ANT be enabled
+ */
public static final String ACTION_REQUEST_ENABLE = "com.dsi.ant.server.action.REQUEST_ENABLE";
+ /**
+ * Request that ANT be disabled
+ */
public static final String ACTION_REQUEST_DISABLE = "com.dsi.ant.server.action.REQUEST_DISABLE";
private JAntJava mJAnt = null;
private boolean mInitialized = false;
+ /**
+ * Flag for if Bluetooth needs to be enabled for ANT to enable
+ */
private boolean mRequiresBluetoothOn = false;
+ /**
+ * Flag which specifies if we are waiting for an ANT enable intent
+ */
private boolean mEnablePending = false;
private Object mChangeAntPowerState_LOCK = new Object();
@@ -65,17 +82,16 @@
IAntHalCallback mCallback;
- private boolean isQcomPlatform()
- {
- if ((SystemProperties.get("ro.board.platform").equals("msm8974"))
- || (SystemProperties.get("ro.board.platform").equals("msm8610"))
- || (SystemProperties.get("ro.board.platform").equals("msm8226"))) {
+ /**
+ * Receives Bluetooth State Changed intent and sends {@link ACTION_REQUEST_ENABLE}
+ * and {@link ACTION_REQUEST_DISABLE} accordingly
+ */
+ private final StateChangedReceiver mStateChangedReceiver = new StateChangedReceiver();
- return true;
- }
- return false;
- }
-
+ /**
+ * Receives {@link ACTION_REQUEST_ENABLE} and {@link ACTION_REQUEST_DISABLE}
+ * intents to enable and disable ANT.
+ */
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -97,6 +113,27 @@
}
};
+ /**
+ * Checks if Bluetooth needs to be turned on for ANT to enable
+ */
+ private boolean requiresBluetoothOn() {
+ return isQcomPlatform();
+ }
+
+ /**
+ * Checks if the current platform is QCom
+ */
+ private boolean isQcomPlatform()
+ {
+ if ((SystemProperties.get("ro.board.platform").equals("msm8974"))
+ || (SystemProperties.get("ro.board.platform").equals("msm8610"))
+ || (SystemProperties.get("ro.board.platform").equals("msm8226"))) {
+
+ return true;
+ }
+ return false;
+ }
+
public static boolean startService(Context context)
{
return ( null != context.startService(new Intent(IAntHal.class.getName())) );
@@ -157,22 +194,25 @@
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter != null) {
+
+ // run with permissions of ANTHALService
long callingPid = Binder.clearCallingIdentity();
if (!bluetoothAdapter.isEnabled()) {
waitForBluetoothToEnable = true;
-
- // check permissions of ANTHALService
+ mEnablePending = true;
+
boolean isEnabling = bluetoothAdapter.enable();
// if enabling adapter has begun, return
// success.
if (isEnabling) {
- mEnablePending = true;
result = AntHalDefine.ANT_HAL_RESULT_SUCCESS;
// StateChangedReceiver will receive
// enabled status and then enable ANT
+ } else {
+ mEnablePending = false;
}
}
@@ -226,44 +266,48 @@
*/
private int asyncSetAntPowerState(final boolean state)
{
- int result = AntHalDefine.ANT_HAL_RESULT_FAIL_UNKNOWN;
+ int result = AntHalDefine.ANT_HAL_RESULT_FAIL_UNKNOWN;
- synchronized(mChangeAntPowerState_LOCK) {
- // Check we are not already in/transitioning to the state we want
- int currentState = doGetAntState();
+ synchronized (mChangeAntPowerState_LOCK) {
+ // Check we are not already in/transitioning to the state we want
+ int currentState = doGetAntState();
- if(state) {
- if((AntHalDefine.ANT_HAL_STATE_ENABLED == currentState)
- || (AntHalDefine.ANT_HAL_STATE_ENABLING == currentState)) {
- if(DEBUG) Log.d(TAG, "Enable request ignored as already enabled/enabling");
+ if (state) {
+ if ((AntHalDefine.ANT_HAL_STATE_ENABLED == currentState)
+ || (AntHalDefine.ANT_HAL_STATE_ENABLING == currentState)) {
+ if (DEBUG) {
+ Log.d(TAG, "Enable request ignored as already enabled/enabling");
+ }
- return AntHalDefine.ANT_HAL_RESULT_SUCCESS;
- } else if(AntHalDefine.ANT_HAL_STATE_DISABLING == currentState) {
- Log.w(TAG, "Enable request ignored as already disabling");
+ return AntHalDefine.ANT_HAL_RESULT_SUCCESS;
+ } else if (AntHalDefine.ANT_HAL_STATE_DISABLING == currentState) {
+ Log.w(TAG, "Enable request ignored as already disabling");
- return AntHalDefine.ANT_HAL_RESULT_FAIL_UNKNOWN;
- }
- } else {
- if((AntHalDefine.ANT_HAL_STATE_DISABLED == currentState)
- || (AntHalDefine.ANT_HAL_STATE_DISABLING == currentState)) {
- if(DEBUG)Log.d(TAG, "Disable request ignored as already disabled/disabling");
+ return AntHalDefine.ANT_HAL_RESULT_FAIL_UNKNOWN;
+ }
+ } else {
+ if ((AntHalDefine.ANT_HAL_STATE_DISABLED == currentState)
+ || (AntHalDefine.ANT_HAL_STATE_DISABLING == currentState)) {
+ if (DEBUG) {
+ Log.d(TAG, "Disable request ignored as already disabled/disabling");
+ }
- return AntHalDefine.ANT_HAL_RESULT_SUCCESS;
- } else if(AntHalDefine.ANT_HAL_STATE_ENABLING == currentState) {
- Log.w(TAG, "Disable request ignored as already enabling");
+ return AntHalDefine.ANT_HAL_RESULT_SUCCESS;
+ } else if (AntHalDefine.ANT_HAL_STATE_ENABLING == currentState) {
+ Log.w(TAG, "Disable request ignored as already enabling");
- return AntHalDefine.ANT_HAL_RESULT_FAIL_UNKNOWN;
- }
- }
+ return AntHalDefine.ANT_HAL_RESULT_FAIL_UNKNOWN;
+ }
+ }
- if (state) {
- result = enableBackground();
- } else {
- result = disableBackground();
- }
+ if (state) {
+ result = enableBackground();
+ } else {
+ result = disableBackground();
+ }
}
-
- return result;
+
+ return result;
}
/**
@@ -513,7 +557,7 @@
}
// create a single new JAnt HCI Interface instance
mJAnt = new JAntJava();
- mRequiresBluetoothOn = isQcomPlatform();
+ mRequiresBluetoothOn = requiresBluetoothOn();
JAntStatus createResult = mJAnt.create(mJAntCallback);
if (createResult == JAntStatus.SUCCESS)
@@ -533,6 +577,12 @@
filter.addAction(ACTION_REQUEST_ENABLE);
filter.addAction(ACTION_REQUEST_DISABLE);
registerReceiver(mReceiver, filter);
+
+ if (mRequiresBluetoothOn) {
+ IntentFilter stateChangedFilter = new IntentFilter();
+ stateChangedFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
+ registerReceiver(mStateChangedReceiver, stateChangedFilter);
+ }
}
@Override
@@ -561,6 +611,10 @@
super.onDestroy();
}
+ if (mRequiresBluetoothOn) {
+ unregisterReceiver(mStateChangedReceiver);
+ }
+
unregisterReceiver(mReceiver);
}