diff --git a/app/app.iml b/app/app.iml
index a4d4a813e..8b30910ab 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -69,6 +69,8 @@
+
+
@@ -89,10 +91,10 @@
-
-
+
-
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 50805557b..3abb9f5f0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -7,8 +7,8 @@ android {
applicationId "no.nordicsemi.android.nrftoolbox"
minSdkVersion 18
targetSdkVersion 22
- versionCode 34
- versionName "1.14.1"
+ versionCode 35
+ versionName "1.14.2"
}
buildTypes {
release {
@@ -20,7 +20,7 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.android.support:appcompat-v7:22.2.0'
+ compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.0'
compile project(':dfu')
compile files('libs/achartengine-1.1.0.jar')
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b2f600e79..5805dcfba 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,8 +23,8 @@
+ android:versionCode="35"
+ android:versionName="1.14.2" >
1)
+ mTextUploading.setText(getString(R.string.dfu_status_uploading_part, currentPart, partsTotal));
+ else
+ mTextUploading.setText(R.string.dfu_status_uploading);
+ }
+
+ @Override
+ public void onError(final String deviceAddress, final int error, final int errorType, final String message) {
+ showErrorMessage(message);
+
+ // We have to wait a bit before canceling notification. This is called before DfuService creates the last notification.
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ // if this activity is still open and upload process was completed, cancel the notification
+ final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ manager.cancel(DfuService.NOTIFICATION_ID);
+ }
+ }, 200);
}
};
@@ -231,25 +293,14 @@ private void setGUI() {
protected void onResume() {
super.onResume();
- // We are using LocalBroadcastReceiver instead of normal BroadcastReceiver for optimization purposes
- final LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(this);
- broadcastManager.registerReceiver(mDfuUpdateReceiver, makeDfuUpdateIntentFilter());
+ DfuServiceListenerHelper.registerProgressListener(this, mDfuProgressListener);
}
@Override
protected void onPause() {
super.onPause();
- final LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(this);
- broadcastManager.unregisterReceiver(mDfuUpdateReceiver);
- }
-
- private static IntentFilter makeDfuUpdateIntentFilter() {
- final IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(DfuService.BROADCAST_PROGRESS);
- intentFilter.addAction(DfuService.BROADCAST_ERROR);
- intentFilter.addAction(DfuService.BROADCAST_LOG);
- return intentFilter;
+ DfuServiceListenerHelper.unregisterProgressListener(this, mDfuProgressListener);
}
private void isBLESupported() {
@@ -743,17 +794,15 @@ public void onUploadClicked(final View view) {
final boolean keepBond = preferences.getBoolean(SettingsFragment.SETTINGS_KEEP_BOND, false);
- final Intent service = new Intent(this, DfuService.class);
- service.putExtra(DfuService.EXTRA_DEVICE_ADDRESS, mSelectedDevice.getAddress());
- service.putExtra(DfuService.EXTRA_DEVICE_NAME, mSelectedDevice.getName());
- service.putExtra(DfuService.EXTRA_FILE_MIME_TYPE, mFileType == DfuService.TYPE_AUTO ? DfuService.MIME_TYPE_ZIP : DfuService.MIME_TYPE_OCTET_STREAM);
- service.putExtra(DfuService.EXTRA_FILE_TYPE, mFileType);
- service.putExtra(DfuService.EXTRA_FILE_PATH, mFilePath);
- service.putExtra(DfuService.EXTRA_FILE_URI, mFileStreamUri);
- service.putExtra(DfuService.EXTRA_INIT_FILE_PATH, mInitFilePath);
- service.putExtra(DfuService.EXTRA_INIT_FILE_URI, mInitFileStreamUri);
- service.putExtra(DfuService.EXTRA_KEEP_BOND, keepBond);
- startService(service);
+ final DfuServiceInitiator starter = new DfuServiceInitiator(mSelectedDevice.getAddress())
+ .setDeviceName(mSelectedDevice.getName())
+ .setKeepBond(keepBond);
+ if (mFileType == DfuService.TYPE_AUTO)
+ starter.setZip(mFileStreamUri, mFilePath);
+ else {
+ starter.setBinOrHex(mFileType, mFileStreamUri, mFilePath).setInitFile(mInitFileStreamUri, mInitFilePath);
+ }
+ starter.start(this, DfuService.class);
}
private void showUploadCancelDialog() {
@@ -789,72 +838,6 @@ public void onDialogCanceled() {
// do nothing
}
- private void updateProgressBar(final int progress, final int part, final int total, final boolean error, final boolean connectionError) {
- switch (progress) {
- case DfuService.PROGRESS_CONNECTING:
- mProgressBar.setIndeterminate(true);
- mTextPercentage.setText(R.string.dfu_status_connecting);
- break;
- case DfuService.PROGRESS_STARTING:
- mProgressBar.setIndeterminate(true);
- mTextPercentage.setText(R.string.dfu_status_starting);
- break;
- case DfuService.PROGRESS_ENABLING_DFU_MODE:
- mProgressBar.setIndeterminate(true);
- mTextPercentage.setText(R.string.dfu_status_switching_to_dfu);
- break;
- case DfuService.PROGRESS_VALIDATING:
- mProgressBar.setIndeterminate(true);
- mTextPercentage.setText(R.string.dfu_status_validating);
- break;
- case DfuService.PROGRESS_DISCONNECTING:
- mProgressBar.setIndeterminate(true);
- mTextPercentage.setText(R.string.dfu_status_disconnecting);
- break;
- case DfuService.PROGRESS_COMPLETED:
- mTextPercentage.setText(R.string.dfu_status_completed);
- // let's wait a bit until we cancel the notification. When canceled immediately it will be recreated by service again.
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- onTransferCompleted();
-
- // if this activity is still open and upload process was completed, cancel the notification
- final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- manager.cancel(DfuService.NOTIFICATION_ID);
- }
- }, 200);
- break;
- case DfuService.PROGRESS_ABORTED:
- mTextPercentage.setText(R.string.dfu_status_aborted);
- // let's wait a bit until we cancel the notification. When canceled immediately it will be recreated by service again.
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- onUploadCanceled();
-
- // if this activity is still open and upload process was completed, cancel the notification
- final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- manager.cancel(DfuService.NOTIFICATION_ID);
- }
- }, 200);
- break;
- default:
- mProgressBar.setIndeterminate(false);
- if (error) {
- showErrorMessage(progress, connectionError);
- } else {
- mProgressBar.setProgress(progress);
- mTextPercentage.setText(getString(R.string.progress, progress));
- if (total > 1)
- mTextUploading.setText(getString(R.string.dfu_status_uploading_part, part, total));
- else
- mTextUploading.setText(R.string.dfu_status_uploading);
- }
- break;
- }
- }
-
private void showProgressBar() {
mProgressBar.setVisibility(View.VISIBLE);
mTextPercentage.setVisibility(View.VISIBLE);
@@ -884,12 +867,9 @@ public void onCancelUpload() {
mTextPercentage.setText(null);
}
- private void showErrorMessage(final int code, final boolean connectionError) {
+ private void showErrorMessage(final String message) {
clearUI(false);
- if (connectionError)
- showToast("Upload failed: " + GattError.parseConnectionError(code));
- else
- showToast("Upload failed: " + GattError.parse(code));
+ showToast("Upload failed: " + message);
}
private void clearUI(final boolean clearDevice) {
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleManager.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleManager.java
index 11c11cfaf..566a0debb 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleManager.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleManager.java
@@ -204,15 +204,19 @@ public void connect(final BluetoothDevice device) {
/**
* Disconnects from the device. Does nothing if not connected.
+ * @return true if device is to be disconnected. False if it was already disconnected.
*/
- public void disconnect() {
+ public boolean disconnect() {
mUserDisconnected = true;
if (mConnected && mBluetoothGatt != null) {
Logger.v(mLogSession, "Disconnecting...");
+ mCallbacks.onDeviceDisconnecting();
Logger.d(mLogSession, "gatt.disconnect()");
mBluetoothGatt.disconnect();
+ return true;
}
+ return false;
}
/**
@@ -618,7 +622,7 @@ private void onError(final String message, final int errorCode) {
@Override
public final void onConnectionStateChange(final BluetoothGatt gatt, final int status, final int newState) {
- Logger.v(mLogSession, "[Callback] Connection state changed with status: " + status + " and new state: " + newState + " (" + stateToString(newState) + ")");
+ Logger.d(mLogSession, "[Callback] Connection state changed with status: " + status + " and new state: " + newState + " (" + stateToString(newState) + ")");
if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED) {
// Notify the parent activity/service
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleManagerCallbacks.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleManagerCallbacks.java
index e2400ef59..c7c4b65e0 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleManagerCallbacks.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleManagerCallbacks.java
@@ -33,7 +33,7 @@ public interface BleManagerCallbacks {
public void onDeviceConnected();
/**
- * Called when user pressed the DISCONNECT button.
+ * Called when user initialized disconnection.
*/
public void onDeviceDisconnecting();
@@ -43,8 +43,8 @@ public interface BleManagerCallbacks {
public void onDeviceDisconnected();
/**
- * Some profiles may use this method to notify user that the link was lost. You must call this method in your Ble Manager instead of {@link #onDeviceDisconnected()} while you discover
- * disconnection not initiated by the user.
+ * This callback is invoked when the Ble Manager lost connection to a device that has been connected with autoConnect option. Otherwise a {@link #onDeviceDisconnected()}
+ * method will be called on such event.
*/
public void onLinklossOccur();
@@ -64,7 +64,7 @@ public interface BleManagerCallbacks {
public void onDeviceReady();
/**
- * Called when battery value has been received from the device
+ * Called when battery value has been received from the device.
*
* @param value
* the battery value in percent
@@ -77,7 +77,7 @@ public interface BleManagerCallbacks {
public void onBondingRequired();
/**
- * Called when the device has been successfully bonded
+ * Called when the device has been successfully bonded.
*/
public void onBonded();
@@ -92,7 +92,7 @@ public interface BleManagerCallbacks {
public void onError(final String message, final int errorCode);
/**
- * Called when service discovery has finished but the main services were not found on the device. This may occur when connecting to bonded device that does not support required services.
+ * Called when service discovery has finished but the main services were not found on the device.
*/
public void onDeviceNotSupported();
}
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileService.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileService.java
index 26571d227..c02537627 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileService.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileService.java
@@ -82,18 +82,12 @@ public class LocalBinder extends Binder {
* Disconnects from the sensor.
*/
public final void disconnect() {
- onDeviceDisconnecting();
if (!mConnected) {
mBleManager.close();
onDeviceDisconnected();
return;
}
- // Notify user about changing the state to DISCONNECTING
- final Intent broadcast = new Intent(BROADCAST_CONNECTION_STATE);
- broadcast.putExtra(EXTRA_CONNECTION_STATE, STATE_DISCONNECTING);
- LocalBroadcastManager.getInstance(BleProfileService.this).sendBroadcast(broadcast);
-
mBleManager.disconnect();
}
@@ -278,7 +272,10 @@ public void onDeviceConnected() {
@Override
public void onDeviceDisconnecting() {
- // do nothing
+ // Notify user about changing the state to DISCONNECTING
+ final Intent broadcast = new Intent(BROADCAST_CONNECTION_STATE);
+ broadcast.putExtra(EXTRA_CONNECTION_STATE, STATE_DISCONNECTING);
+ LocalBroadcastManager.getInstance(this).sendBroadcast(broadcast);
}
@Override
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileServiceReadyActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileServiceReadyActivity.java
index d7121aa3c..3f0c16120 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileServiceReadyActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileServiceReadyActivity.java
@@ -398,7 +398,6 @@ public void onConnectClicked(final View view) {
showDeviceScanningDialog(getFilterUUID(), isDiscoverableRequired());
} else {
Logger.v(mLogSession, "Disconnecting...");
- onDeviceDisconnecting();
mService.disconnect();
}
} else {
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/ProximityManager.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/ProximityManager.java
index 12f38118d..00f1b4c34 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/ProximityManager.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/ProximityManager.java
@@ -230,9 +230,10 @@ public void connect(final BluetoothDevice device) {
}
@Override
- public void disconnect() {
- super.disconnect();
+ public boolean disconnect() {
+ final boolean result = super.disconnect();
closeGattServer();
+ return result;
}
@Override
diff --git a/build.gradle b/build.gradle
index d3ff69d6e..9405f3fd1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.1.0'
+ classpath 'com.android.tools.build:gradle:1.2.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/release/nRFToolbox_1_14_1.apk b/release/nRFToolbox_1_14_1.apk
deleted file mode 100644
index cf4865d76..000000000
Binary files a/release/nRFToolbox_1_14_1.apk and /dev/null differ