private void configureLibrary() {
    muse.registerConnectionListener(connectionListener);
    muse.registerDataListener(dataListener, MuseDataPacketType.ACCELEROMETER);
    muse.registerDataListener(dataListener, MuseDataPacketType.EEG);
    muse.registerDataListener(dataListener, MuseDataPacketType.ALPHA_RELATIVE);

    muse.registerDataListener(dataListener, MuseDataPacketType.ARTIFACTS);
    muse.registerDataListener(dataListener, MuseDataPacketType.BATTERY);
    // kt start:
    muse.registerDataListener(dataListener, MuseDataPacketType.ALPHA_ABSOLUTE);
    muse.registerDataListener(dataListener, MuseDataPacketType.BETA_ABSOLUTE);
    muse.registerDataListener(dataListener, MuseDataPacketType.DELTA_ABSOLUTE);
    muse.registerDataListener(dataListener, MuseDataPacketType.GAMMA_ABSOLUTE);
    muse.registerDataListener(dataListener, MuseDataPacketType.THETA_ABSOLUTE);

    muse.registerDataListener(dataListener, MuseDataPacketType.HORSESHOE);
    // kt end

    muse.setPreset(MusePreset.PRESET_14);
    muse.enableDataTransmission(dataTransmission);
  }
  @Override
  public void onClick(View v) {
    Spinner musesSpinner = (Spinner) findViewById(R.id.muses_spinner);
    if (v.getId() == R.id.refresh) {
      MuseManager.refreshPairedMuses();
      List<Muse> pairedMuses = MuseManager.getPairedMuses();
      List<String> spinnerItems = new ArrayList<String>();
      for (Muse m : pairedMuses) {
        String dev_id = m.getName() + "-" + m.getMacAddress();
        Log.i("Muse Headband", dev_id);
        spinnerItems.add(dev_id);
      }
      ArrayAdapter<String> adapterArray =
          new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerItems);
      musesSpinner.setAdapter(adapterArray);
    } else if (v.getId() == R.id.connect) {
      List<Muse> pairedMuses = MuseManager.getPairedMuses();
      if (pairedMuses.size() < 1 || musesSpinner.getAdapter().getCount() < 1) {
        Log.w("Muse Headband", "There is nothing to connect to");
      } else {
        muse = pairedMuses.get(musesSpinner.getSelectedItemPosition());
        ConnectionState state = muse.getConnectionState();
        if (state == ConnectionState.CONNECTED || state == ConnectionState.CONNECTING) {
          Log.w("Muse Headband", "doesn't make sense to connect second time to the same muse");
          return;
        }
        configureLibrary();
        fileWriter.open();
        fileWriter.addAnnotationString(1, "Connect clicked");
        stopSounds = 0;

        /**
         * In most cases libmuse native library takes care about exceptions and recovery mechanism,
         * but native code still may throw in some unexpected situations (like bad bluetooth
         * connection). Print all exceptions here.
         */
        try {
          muse.runAsynchronously();
        } catch (Exception e) {
          Log.e("Muse Headband", e.toString());
        }
      }
    } else if (v.getId() == R.id.disconnect) {
      if (muse != null) {
        /**
         * true flag will force libmuse to unregister all listeners, BUT AFTER disconnecting and
         * sending disconnection event. If you don't want to receive disconnection event (for ex.
         * you call disconnect when application is closed), then unregister listeners first and then
         * call disconnect: muse.unregisterAllListeners(); muse.disconnect(false);
         */
        stopSounds = 1;
        muse.disconnect(true);
        fileWriter.addAnnotationString(1, "Disconnect clicked");
        fileWriter.flush();
        fileWriter.close();
        try {
          writeData.flush();
          writeData.close();
        } catch (Exception e) {
          Log.e("Muse Headband exception", e.toString());
        }
      }
    } else if (v.getId() == R.id.pause) {
      dataTransmission = !dataTransmission;
      if (muse != null) {
        muse.enableDataTransmission(dataTransmission);
      }
    }
  }