@Override
  public boolean onCreateOptionsMenu(Menu menu) {
    this.optionsMenu = menu;
    getMenuInflater().inflate(R.menu.stations_list, menu);

    if (jsonDownloadTask != null
        && (jsonDownloadTask.getStatus() == AsyncTask.Status.PENDING
            || jsonDownloadTask.getStatus() == AsyncTask.Status.RUNNING)) {
      setRefreshActionButtonState(true);
    }

    SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

    searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setSearchableInfo(manager.getSearchableInfo(getComponentName()));
    searchView.setOnQueryTextListener(
        new SearchView.OnQueryTextListener() {

          @Override
          public boolean onQueryTextSubmit(String s) {
            return false;
          }

          @Override
          public boolean onQueryTextChange(String s) {
            loadData(s);
            return true;
          }
        });

    return true;
  }
  @Override
  protected void onResume() {
    super.onResume();

    if ((jsonDownloadTask != null && jsonDownloadTask.getStatus() == AsyncTask.Status.FINISHED)) {
      long dbLastUpdate = settings.getLong(PREF_KEY_DB_LAST_UPDATE, -1);
      long currentTime = System.currentTimeMillis();

      /* update automatically if data are more than 10 min old */
      if ((dbLastUpdate != -1) && ((currentTime - dbLastUpdate) > 600000)) {
        String networkId = settings.getString(PREF_KEY_NETWORK_ID, "");
        String stationUrl = BASE_URL + "/" + networkId;
        jsonDownloadTask = new JSONDownloadTask();
        jsonDownloadTask.execute(stationUrl);
      }
    }
  }
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (requestCode == PICK_NETWORK_REQUEST) {
     Log.d(TAG, "PICK_NETWORK_REQUEST");
     if (resultCode == RESULT_OK) {
       Log.d(TAG, "RESULT_OK");
       String stationUrl = BASE_URL + "/" + data.getExtras().getString("network-id");
       jsonDownloadTask = new JSONDownloadTask();
       jsonDownloadTask.execute(stationUrl);
     }
   }
 }
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
   int id = item.getItemId();
   switch (id) {
     case R.id.action_settings:
       Intent settingsIntent = new Intent(this, SettingsActivity.class);
       startActivity(settingsIntent);
       return true;
     case R.id.action_refresh:
       String networkId =
           PreferenceManager.getDefaultSharedPreferences(this).getString(PREF_KEY_NETWORK_ID, "");
       String stationUrl = BASE_URL + "/" + networkId;
       jsonDownloadTask = new JSONDownloadTask();
       jsonDownloadTask.execute(stationUrl);
       return true;
     case R.id.action_map:
       Intent mapIntent = new Intent(this, MapActivity.class);
       startActivity(mapIntent);
     default:
       return super.onOptionsItemSelected(item);
   }
 }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_stations_list);

    viewPager = (ViewPager) findViewById(R.id.viewPager);
    viewPager.setOnPageChangeListener(
        new ViewPager.OnPageChangeListener() {
          @Override
          public void onPageScrolled(
              int position, float positionOffset, int positionOffsetPixels) {}

          @Override
          public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
          }

          @Override
          public void onPageScrollStateChanged(int state) {}
        });

    stationsDataSource = new StationsDataSource(this);
    stations = stationsDataSource.getStations();
    favStations = stationsDataSource.getFavoriteStations();

    actionBar = getActionBar();
    actionBar.addTab(
        actionBar.newTab().setText(getString(R.string.all_stations)).setTabListener(this));
    actionBar.addTab(
        actionBar.newTab().setText(getString(R.string.favorite_stations)).setTabListener(this));
    actionBar.setHomeButtonEnabled(false);

    settings = PreferenceManager.getDefaultSharedPreferences(this);

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    tabsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager());
    viewPager.setAdapter(tabsPagerAdapter);
    boolean firstRun = settings.getString(PREF_KEY_NETWORK_ID, "").isEmpty();
    setDBLastUpdateText();

    if (firstRun) {
      AlertDialog.Builder builder = new AlertDialog.Builder(this);
      builder.setMessage(R.string.welcome_dialog_message);
      builder.setTitle(R.string.welcome_dialog_title);
      builder.setPositiveButton(
          R.string.welcome_dialog_ok,
          new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
              Intent intent = new Intent(StationsListActivity.this, BikeNetworksListActivity.class);
              startActivityForResult(intent, PICK_NETWORK_REQUEST);
            }
          });
      builder.setNegativeButton(
          R.string.welcome_dialog_cancel,
          new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
              finish();
            }
          });
      AlertDialog dialog = builder.create();
      dialog.show();
    } else {
      if (savedInstanceState != null) {
        bikeNetwork = (BikeNetwork) savedInstanceState.getSerializable("bikeNetwork");
        stations = (ArrayList<Station>) savedInstanceState.getSerializable("stations");
        favStations = (ArrayList<Station>) savedInstanceState.getSerializable("favStations");
      } else {
        String networkId = settings.getString(PREF_KEY_NETWORK_ID, "");
        String stationUrl = BASE_URL + "/" + networkId;
        jsonDownloadTask = new JSONDownloadTask();
        jsonDownloadTask.execute(stationUrl);
      }
    }
  }