@Override
 public boolean onChildClick(
     ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
   LocalIndexInfo item = listAdapter.getChild(groupPosition, childPosition);
   item.setExpanded(!item.isExpanded());
   if (item.isExpanded()) {
     descriptionLoader = new LoadLocalIndexDescriptionTask();
     descriptionLoader.execute(item);
   }
   if (selectionMode) {
     selectedItems.add(item);
   }
   listAdapter.notifyDataSetInvalidated();
   return true;
 }
 @Override
 protected void onDestroy() {
   super.onDestroy();
   asyncLoader.cancel(true);
   descriptionLoader.cancel(true);
 }
 private void showContextMenu(final LocalIndexInfo info) {
   Builder builder = new AlertDialog.Builder(this);
   final List<Integer> menu = new ArrayList<Integer>();
   if (info.getType() == LocalIndexType.GPX_DATA) {
     menu.add(R.string.show_gpx_route);
     menu.add(R.string.local_index_mi_upload_gpx);
     descriptionLoader = new LoadLocalIndexDescriptionTask();
     descriptionLoader.execute(info);
   }
   if (info.getType() == LocalIndexType.MAP_DATA || info.getType() == LocalIndexType.POI_DATA) {
     if (!info.isBackupedData()) {
       menu.add(R.string.local_index_mi_backup);
     }
   }
   if (info.isBackupedData()) {
     menu.add(R.string.local_index_mi_restore);
   }
   menu.add(R.string.local_index_mi_rename);
   menu.add(R.string.local_index_mi_delete);
   if (!menu.isEmpty()) {
     String[] values = new String[menu.size()];
     for (int i = 0; i < values.length; i++) {
       values[i] = getString(menu.get(i));
     }
     builder.setItems(
         values,
         new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
             int resId = menu.get(which);
             if (resId == R.string.show_gpx_route) {
               if (info != null && info.getGpxFile() != null) {
                 WptPt loc = info.getGpxFile().findPointToShow();
                 if (loc != null) {
                   OsmandSettings settings =
                       OsmandSettings.getOsmandSettings(LocalIndexesActivity.this);
                   settings.setMapLocationToShow(loc.lat, loc.lon, settings.getLastKnownMapZoom());
                 }
                 ((OsmandApplication) getApplication()).setGpxFileToDisplay(info.getGpxFile());
                 MapActivity.launchMapActivityMoveToTop(LocalIndexesActivity.this);
               }
             } else if (resId == R.string.local_index_mi_rename) {
               renameFile(info);
             } else if (resId == R.string.local_index_mi_restore) {
               new LocalIndexOperationTask(RESTORE_OPERATION).execute(info);
             } else if (resId == R.string.local_index_mi_delete) {
               Builder confirm = new AlertDialog.Builder(LocalIndexesActivity.this);
               confirm.setPositiveButton(
                   R.string.default_buttons_yes,
                   new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
                       new LocalIndexOperationTask(DELETE_OPERATION).execute(info);
                     }
                   });
               confirm.setNegativeButton(R.string.default_buttons_no, null);
               // confirm.setTitle(R.string.delete_confirmation_title);
               confirm.setMessage(getString(R.string.delete_confirmation_msg, info.getFileName()));
               confirm.show();
             } else if (resId == R.string.local_index_mi_backup) {
               new LocalIndexOperationTask(BACKUP_OPERATION).execute(info);
             } else if (resId == R.string.local_index_mi_upload_gpx) {
               Builder confirm = new AlertDialog.Builder(LocalIndexesActivity.this);
               confirm.setPositiveButton(
                   R.string.default_buttons_yes,
                   new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
                       new UploadGPXFilesTask().execute(info);
                     }
                   });
               confirm.setNegativeButton(R.string.default_buttons_no, null);
               confirm.setMessage(
                   getString(R.string.sendtoOSM_confirmation_msg, info.getFileName()));
               confirm.show();
             }
           }
         });
   }
   builder.show();
 }