docs: @Override
  	public void updateProgressNotification() {
  		final DfuProgressInfo info = mProgressInfo;
  		final int progress = info.getProgress();
  		if (mLastProgress == progress)
  			return;
  
  		mLastProgress = progress;
  
  		// send progress or error broadcast
  		sendProgressBroadcast(info);
  
  		if (mDisableNotification)
  			return;
  
  		// the notification may not be refreshed too quickly as the ABORT button becomes not clickable
  		// If new state is an end-state, update regardless so it will not stick around in "Disconnecting" state
  		final long now = SystemClock.elapsedRealtime();
  		if (now - mLastNotificationTime < 250 && !(PROGRESS_COMPLETED == progress || PROGRESS_ABORTED == progress))
  			return;
  		mLastNotificationTime = now;
  
  		// create or update notification:
  		final String deviceAddress = mDeviceAddress;
  		final String deviceName = mDeviceName != null ? mDeviceName : getString(R.string.dfu_unknown_name);
  
  		final NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_DFU)
  				.setSmallIcon(android.R.drawable.stat_sys_upload).setOnlyAlertOnce(true);//.setLargeIcon(largeIcon);
  		// Android 5
  		builder.setColor(Color.GRAY);
  
  		switch (progress) {
  			case PROGRESS_CONNECTING:
  				builder.setOngoing(true).setContentTitle(getString(R.string.dfu_status_connecting)).setContentText(getString(R.string.dfu_status_connecting_msg, deviceName))
  						.setProgress(100, 0, true);
  				break;
  			case PROGRESS_STARTING:
  				builder.setOngoing(true).setContentTitle(getString(R.string.dfu_status_starting)).setContentText(getString(R.string.dfu_status_starting_msg))
  						.setProgress(100, 0, true);
  				break;
  			case PROGRESS_ENABLING_DFU_MODE:
  				builder.setOngoing(true).setContentTitle(getString(R.string.dfu_status_switching_to_dfu)).setContentText(getString(R.string.dfu_status_switching_to_dfu_msg))
  						.setProgress(100, 0, true);
  				break;
  			case PROGRESS_VALIDATING:
  				builder.setOngoing(true).setContentTitle(getString(R.string.dfu_status_validating)).setContentText(getString(R.string.dfu_status_validating_msg))
  						.setProgress(100, 0, true);
  				break;
  			case PROGRESS_DISCONNECTING:
  				builder.setOngoing(true).setContentTitle(getString(R.string.dfu_status_disconnecting)).setContentText(getString(R.string.dfu_status_disconnecting_msg, deviceName))
  						.setProgress(100, 0, true);
  				break;
  			case PROGRESS_COMPLETED:
  				builder.setOngoing(false).setContentTitle(getString(R.string.dfu_status_completed)).setSmallIcon(android.R.drawable.stat_sys_upload_done)
  						.setContentText(getString(R.string.dfu_status_completed_msg)).setAutoCancel(true).setColor(0xFF00B81A);
  				break;
  			case PROGRESS_ABORTED:
  				builder.setOngoing(false).setContentTitle(getString(R.string.dfu_status_aborted)).setSmallIcon(android.R.drawable.stat_sys_upload_done)
  						.setContentText(getString(R.string.dfu_status_aborted_msg)).setAutoCancel(true);
  				break;
  			default:
  				// progress is in percents
  				final String title = info.getTotalParts() == 1 ? getString(R.string.dfu_status_uploading) : getString(R.string.dfu_status_uploading_part, info.getCurrentPart(), info.getTotalParts());
  				final String text = getString(R.string.dfu_status_uploading_msg, deviceName);
  				builder.setOngoing(true).setContentTitle(title).setContentText(text)
  						.setProgress(100, progress, false);
  				break;
  		}
  
  		// update the notification
  		final Intent intent = new Intent(this, getNotificationTarget());
  		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  		intent.putExtra(EXTRA_DEVICE_ADDRESS, deviceAddress);
  		intent.putExtra(EXTRA_DEVICE_NAME, deviceName);
  		intent.putExtra(EXTRA_PROGRESS, progress);
  		final PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  		builder.setContentIntent(pendingIntent);
  
  		// Any additional configuration?
  		updateProgressNotification(builder, progress);
  
  		final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
  		manager.notify(NOTIFICATION_ID, builder.build());
  	}