// we want a self defined behavior for the back button
  @Override
  public void onBackPressed() {
    // exit fullscreen mode if it is enabled and action bar is disabled or the back stack is empty
    if (mIitcWebView.isInFullscreen() && mBackStack.isEmpty()) {
      mIitcWebView.toggleFullscreen();
      return;
    }

    // close drawer if opened
    if (mNavigationHelper.isDrawerOpened()) {
      mNavigationHelper.closeDrawers();
      return;
    }

    // kill all open iitc dialogs
    if (!mDialogStack.isEmpty()) {
      final String id = mDialogStack.pop();
      mIitcWebView.loadUrl(
          "javascript: "
              + "var selector = $(window.DIALOGS['"
              + id
              + "']); "
              + "selector.dialog('close'); "
              + "selector.remove();");
      return;
    }

    // Pop last item from backstack and pretend the relevant menu item was clicked
    if (!mBackStack.isEmpty()) {
      backStackPop();
      mBackButtonPressed = true;
      return;
    }

    if (mBackButtonPressed || !mSharedPrefs.getBoolean("pref_press_twice_to_exit", false)) {
      super.onBackPressed();
    } else {
      mBackButtonPressed = true;
      Toast.makeText(this, "Press twice to exit", Toast.LENGTH_SHORT).show();
      // reset back button after 2 seconds
      new Handler()
          .postDelayed(
              new Runnable() {
                @Override
                public void run() {
                  mBackButtonPressed = false;
                }
              },
              2000);
    }
  }
  @Override
  public boolean onPrepareOptionsMenu(final Menu menu) {
    boolean visible = false;
    if (mNavigationHelper != null) visible = !mNavigationHelper.isDrawerOpened();
    if (mIsLoading) visible = false;

    for (int i = 0; i < menu.size(); i++) {
      final MenuItem item = menu.getItem(i);
      final boolean enabled = mAdvancedMenu.contains(item.getTitle());

      switch (item.getItemId()) {
        case R.id.action_settings:
          item.setVisible(true);
          break;

        case R.id.locate:
          item.setVisible(enabled && visible);
          item.setEnabled(!mIsLoading);
          item.setIcon(
              mUserLocation.isFollowing()
                  ? R.drawable.ic_action_location_follow
                  : R.drawable.ic_action_location_found);
          break;

        case R.id.menu_debug:
          item.setVisible(enabled);
          item.setChecked(mDebugging);
          break;

        default:
          item.setVisible(enabled && visible);
      }
    }

    return super.onPrepareOptionsMenu(menu);
  }