@Override
 public void headfreeModeValueDidChange(boolean isHeadfree) {
   if (settings.isHeadFreeMode()) {
     aux1Channel.setValue(1);
   } else {
     aux1Channel.setValue(-1);
   }
 }
  @Override
  public void leftHandedValueDidChange(boolean isLeftHanded) {
    this.isLeftHanded = isLeftHanded;

    setJoysticks();

    Log.e(TAG, "THRO:" + throttleChannel.getValue());

    getRudderAndThrottleJoystick().setYValue(throttleChannel.getValue());
  }
  private void initChannels() {
    aileronChannel = settings.getChannel(Channel.CHANNEL_NAME_AILERON);
    elevatorChannel = settings.getChannel(Channel.CHANNEL_NAME_ELEVATOR);
    rudderChannel = settings.getChannel(Channel.CHANNEL_NAME_RUDDER);
    throttleChannel = settings.getChannel(Channel.CHANNEL_NAME_THROTTLE);
    aux1Channel = settings.getChannel(Channel.CHANNEL_NAME_AUX1);
    aux2Channel = settings.getChannel(Channel.CHANNEL_NAME_AUX2);
    aux3Channel = settings.getChannel(Channel.CHANNEL_NAME_AUX3);
    aux4Channel = settings.getChannel(Channel.CHANNEL_NAME_AUX4);

    aileronChannel.setValue(0.0f);
    elevatorChannel.setValue(0.0f);
    rudderChannel.setValue(0.0f);
    throttleChannel.setValue(-1);
  }
  @Override
  public void onDeviceOrientationChanged(
      float[] orientation, float magneticHeading, int magnetoAccuracy) {
    if (rollAndPitchJoystickPressed == false) {
      pitchBase = orientation[PITCH];
      rollBase = orientation[ROLL];
      aileronChannel.setValue(0.0f);
      elevatorChannel.setValue(0.0f);

      Log.d(TAG, "before pressed ROLL:" + rollBase + ",PITCH:" + pitchBase);
    } else {
      float x = (orientation[PITCH] - pitchBase);
      float y = (orientation[ROLL] - rollBase);

      if (isAccMode) {
        Log.d(TAG, "ROLL:" + (-x) + ",PITCH:" + y);

        if (Math.abs(x) > ACCELERO_TRESHOLD || Math.abs(y) > ACCELERO_TRESHOLD) {
          if (settings.isBeginnerMode()) {
            aileronChannel.setValue(-x * BEGINNER_AILERON_CHANNEL_RATIO);
            elevatorChannel.setValue(y * BEGINNER_ELEVATOR_CHANNEL_RATIO);
          } else {
            aileronChannel.setValue(-x);
            elevatorChannel.setValue(y);
          }
        }
      }
    }
  }
  public HudViewController(Activity context, HudViewControllerDelegate delegate) {
    this.delegate = delegate;
    this.context = context;
    Transmitter.sharedTransmitter().setBleConnectionManager(new BleConnectinManager(context));

    settings = ((HexMiniApplication) context.getApplication()).getAppSettings();

    joypadOpacity = settings.getInterfaceOpacity();
    isLeftHanded = settings.isLeftHanded();

    this.context = context;
    gestureDetector = new EnhancedGestureDetector(context, this);

    joysticks = new JoystickBase[2];

    glView = new GLSurfaceView(context);
    glView.setEGLContextClientVersion(2);

    LayoutInflater inflater =
        (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    // LinearLayout hud = (LinearLayout)inflater.inflate(R.layout.hud, null);
    // LayoutParams layoutParams = new LayoutParams(LayoutParams.FILL_PARENT,
    // LayoutParams.FILL_PARENT);

    // hud.addView(glView, layoutParams);
    // glView.setBackgroundResource(R.drawable.settings_bg);

    context.setContentView(glView);

    renderer = new UIRenderer(context, null);

    initGLSurfaceView();

    Resources res = context.getResources();

    Image topBarBg = new Image(res, R.drawable.bar_top, Align.TOP_CENTER);
    topBarBg.setSizeParams(SizeParams.FILL_SCREEN, SizeParams.NONE); // Width水平伸缩至全屏,height保持不边
    topBarBg.setAlphaEnabled(false);

    bottomBarBg = new Image(res, R.drawable.bar_bottom, Align.BOTTOM_CENTER);
    bottomBarBg.setSizeParams(SizeParams.FILL_SCREEN, SizeParams.NONE);
    bottomBarBg.setAlphaEnabled(false);

    Image middleBg = new Image(res, R.drawable.bg_tile, Align.CENTER);
    middleBg.setAlpha(1f);
    middleBg.setVisible(false);
    middleBg.setSizeParams(
        SizeParams.FILL_SCREEN, SizeParams.FILL_SCREEN); // Width水平伸缩至全屏,height保持不边
    middleBg.setAlphaEnabled(true);

    Image bottomLeftSkrew = new Image(res, R.drawable.screw, Align.BOTTOM_LEFT);
    Image bottomRightSkrew = new Image(res, R.drawable.screw, Align.BOTTOM_RIGHT);

    Image logo = new Image(res, R.drawable.logo, Align.BOTTOM_LEFT);
    logo.setMargin(
        0,
        0,
        (int) res.getDimension(R.dimen.hud_logo_margin_bottom),
        (int) res.getDimension(R.dimen.hud_logo_margin_left));

    Image statusBar = new Image(res, R.drawable.status_bar, Align.TOP_LEFT);
    statusBar.setMargin(
        (int) res.getDimension(R.dimen.hud_status_bar_margin_top),
        0,
        0,
        (int) res.getDimension(R.dimen.hud_status_bar_margin_left));

    settingsBtn =
        new Button(
            res, R.drawable.btn_settings_normal, R.drawable.btn_settings_hl, Align.TOP_RIGHT);
    settingsBtn.setMargin(
        (int) res.getDimension(R.dimen.hud_btn_settings_margin_top),
        (int) res.getDimension(R.dimen.hud_btn_settings_margin_right),
        0,
        0);

    Button helpBtn =
        new Button(res, R.drawable.btn_help_normal, R.drawable.btn_help_hl, Align.TOP_RIGHT);
    helpBtn.setMargin(
        (int) res.getDimension(R.dimen.hud_btn_settings_margin_top),
        (int) res.getDimension(R.dimen.hud_btn_settings_margin_right) * 4,
        0,
        0);

    takeOffBtn =
        new Button(
            res, R.drawable.btn_take_off_normal, R.drawable.btn_take_off_hl, Align.BOTTOM_CENTER);
    stopBtn = new Button(res, R.drawable.btn_stop_normal, R.drawable.btn_stop_hl, Align.TOP_CENTER);

    String state =
        context.getResources().getString(R.string.settings_item_connection_state_not_conneceted);
    stateTextView = new Text(context, state, Align.TOP_LEFT);
    stateTextView.setMargin(
        (int) res.getDimension(R.dimen.hud_state_text_margin_top),
        0,
        0,
        (int) res.getDimension(R.dimen.hud_state_text_margin_left));
    stateTextView.setTextColor(Color.WHITE);
    stateTextView.setTypeface(FontUtils.TYPEFACE.Helvetica(context));
    stateTextView.setTextSize(res.getDimensionPixelSize(R.dimen.hud_state_text_size));

    altHoldToggleBtn =
        new ToggleButton(
            res,
            R.drawable.alt_hold_off,
            R.drawable.alt_hold_off_hl,
            R.drawable.alt_hold_on,
            R.drawable.alt_hold_on_hl,
            R.drawable.alt_hold_on,
            Align.TOP_LEFT);

    altHoldToggleBtn.setMargin(
        res.getDimensionPixelOffset(R.dimen.hud_alt_hold_toggle_btn_margin_top),
        0,
        0,
        res.getDimensionPixelOffset(R.dimen.hud_alt_hold_toggle_btn_margin_left));
    altHoldToggleBtn.setChecked(settings.isAltHoldMode());

    buttons = new Button[5];
    buttons[0] = settingsBtn;
    buttons[1] = takeOffBtn;
    buttons[2] = stopBtn;
    buttons[3] = altHoldToggleBtn;
    buttons[4] = helpBtn;

    renderer.addSprite(MIDLLE_BG_ID, middleBg);
    renderer.addSprite(TOP_BAR_ID, topBarBg);
    renderer.addSprite(BOTTOM_BAR_ID, bottomBarBg);
    renderer.addSprite(BOTTOM_LEFT_SKREW, bottomLeftSkrew);
    renderer.addSprite(BOTTOM_RIGHT_SKREW, bottomRightSkrew);
    renderer.addSprite(LOGO, logo);
    renderer.addSprite(STATUS_BAR, statusBar);
    renderer.addSprite(TAKE_OFF_BTN_ID, takeOffBtn);
    renderer.addSprite(STOP_BTN_ID, stopBtn);
    renderer.addSprite(SETTINGS_BTN_ID, settingsBtn);
    renderer.addSprite(ALT_HOLD_TOGGLE_BTN, altHoldToggleBtn);
    renderer.addSprite(STATE_TEXT_VIEW, stateTextView);
    renderer.addSprite(HELP_BTN, helpBtn);

    isAccMode = settings.isAccMode();
    deviceOrientationManager =
        new DeviceOrientationManager(new DeviceSensorManagerWrapper(this.context), this);
    deviceOrientationManager.onCreate();

    initJoystickListeners();

    helpBtn.setOnClickListener(
        new OnClickListener() {

          @Override
          public void onClick(View v) {
            Intent intent = new Intent(HudViewController.this.context, HelpActivity.class);
            HudViewController.this.context.startActivity(intent);
          }
        });

    if (isAccMode) {
      initJoysticks(JoystickType.ACCELERO);
    } else {
      initJoysticks(JoystickType.ANALOGUE);
    }

    initListeners();

    initChannels();

    if (settings.isHeadFreeMode()) {
      aux1Channel.setValue(1);
    } else {
      aux1Channel.setValue(-1);
    }

    if (settings.isAltHoldMode()) {
      aux2Channel.setValue(1);
    } else {
      aux2Channel.setValue(-1);
    }

    if (settings.isBeginnerMode()) {
      new AlertDialog.Builder(context)
          .setIcon(android.R.drawable.ic_dialog_alert)
          .setTitle(R.string.dialog_title_info)
          .setMessage(R.string.beginner_mode_info)
          .setPositiveButton(
              R.string.dialog_btn_ok,
              new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {}
              })
          .show();
    }
  }