private void saveBeacon(Beacon beacon) {
    if (DataUtils.isNetworkAvailable(getActivity())) {
      showProgressDialog();
      boolean hasStatusChanged = false;
      if (mPropertiesMode == Mode.UPDATE) hasStatusChanged = beacon.status != mBeacon.status;

      Observable<Beacon> beaconObservable =
          mPropertiesMode == Mode.UPDATE
              ? mDataManager.updateBeacon(
                  mBeacon.beaconName, beacon, hasStatusChanged, beacon.status)
              : mDataManager.registerBeacon(beacon);

      mSubscriptions.add(
          beaconObservable
              .observeOn(AndroidSchedulers.mainThread())
              .subscribeOn(mDataManager.getScheduler())
              .subscribe(
                  new Subscriber<Beacon>() {
                    @Override
                    public void onCompleted() {
                      mProgressDialog.dismiss();
                      WatchTowerApplication.get(getActivity())
                          .getComponent()
                          .eventBus()
                          .post(new BusEvent.BeaconListAmended());
                      getActivity().finish();
                    }

                    @Override
                    public void onError(Throwable error) {
                      mProgressDialog.dismiss();
                      Timber.d("There was an error saving the beacon : " + error.getMessage());
                      if (error instanceof RetrofitError) {
                        DialogFactory.createRetrofitErrorDialog(
                                getActivity(), (RetrofitError) error)
                            .show();
                      } else {
                        DialogFactory.createSimpleErrorDialog(getActivity()).show();
                      }
                    }

                    @Override
                    public void onNext(Beacon beacon) {
                      if (mPropertiesMode == Mode.UPDATE) {
                        WatchTowerApplication.get(getActivity())
                            .getComponent()
                            .eventBus()
                            .post(new BusEvent.BeaconUpdated(beacon));
                      }
                    }
                  }));
    } else {
      DialogFactory.createSimpleOkErrorDialog(
              getActivity(),
              getString(R.string.dialog_error_title),
              getString(R.string.dialog_error_no_connection))
          .show();
    }
  }
 private void showProgressDialog() {
   mProgressDialog =
       DialogFactory.createProgressDialog(getActivity(), R.string.progress_dialog_saving_beacon);
   mProgressDialog.show();
 }