private void displayShareInfo(final Share share) {
    List<Integer> headers = new ArrayList<>();
    List<String> details = new ArrayList<>();

    headers.add(R.string.details_title);
    details.add(share.getName());

    headers.add(R.string.details_owner);
    details.add(share.getUsername());

    headers.add(R.string.details_description);
    details.add(share.getDescription());

    headers.add(R.string.details_url);
    details.add(share.getUrl());

    headers.add(R.string.details_created);
    details.add(Util.formatDate(share.getCreated()));

    headers.add(R.string.details_last_played);
    details.add(Util.formatDate(share.getLastVisited()));

    headers.add(R.string.details_expiration);
    details.add(Util.formatDate(share.getExpires(), false));

    headers.add(R.string.details_played_count);
    details.add(Long.toString(share.getVisitCount()));

    Util.showDetailsDialog(context, R.string.details_title_playlist, headers, details);
  }
  private void deleteShare(final Share share) {
    Util.confirmDialog(
        context,
        R.string.common_delete,
        share.getName(),
        new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialog, int which) {
            new LoadingTask<Void>(context, false) {
              @Override
              protected Void doInBackground() throws Throwable {
                MusicService musicService = MusicServiceFactory.getMusicService(context);
                musicService.deleteShare(share.getId(), context, null);
                return null;
              }

              @Override
              protected void done(Void result) {
                adapter.removeItem(share);
                Util.toast(
                    context,
                    context.getResources().getString(R.string.share_deleted, share.getName()));
              }

              @Override
              protected void error(Throwable error) {
                String msg;
                if (error instanceof OfflineException || error instanceof ServerTooOldException) {
                  msg = getErrorMessage(error);
                } else {
                  msg =
                      context
                              .getResources()
                              .getString(R.string.share_deleted_error, share.getName())
                          + " "
                          + getErrorMessage(error);
                }

                Util.toast(context, msg, false);
              }
            }.execute();
          }
        });
  }
  private void updateShareInfo(final Share share) {
    View dialogView = context.getLayoutInflater().inflate(R.layout.update_share, null);
    final EditText nameBox = (EditText) dialogView.findViewById(R.id.get_share_name);
    final DatePicker expireBox = (DatePicker) dialogView.findViewById(R.id.get_share_expire);
    final CheckBox noExpiresBox = (CheckBox) dialogView.findViewById(R.id.get_share_no_expire);

    nameBox.setText(share.getDescription());
    Date expires = share.getExpires();
    if (expires != null) {
      expireBox.updateDate(expires.getYear() + 1900, expires.getMonth(), expires.getDate());
    }

    boolean noExpires = share.getExpires() == null;
    if (noExpires) {
      expireBox.setEnabled(false);
      noExpiresBox.setChecked(true);
    }

    noExpiresBox.setOnCheckedChangeListener(
        new CompoundButton.OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            expireBox.setEnabled(!isChecked);
          }
        });

    new AlertDialog.Builder(context)
        .setIcon(android.R.drawable.ic_dialog_alert)
        .setTitle(R.string.playlist_update_info)
        .setView(dialogView)
        .setPositiveButton(
            R.string.common_ok,
            new DialogInterface.OnClickListener() {
              @Override
              public void onClick(DialogInterface dialog, int which) {
                new LoadingTask<Void>(context, false) {
                  @Override
                  protected Void doInBackground() throws Throwable {
                    Long expiresIn = 0L;
                    if (!noExpiresBox.isChecked()) {
                      Date expires =
                          new Date(
                              expireBox.getYear() - 1900,
                              expireBox.getMonth(),
                              expireBox.getDayOfMonth());
                      expiresIn = expires.getTime();
                    }

                    MusicService musicService = MusicServiceFactory.getMusicService(context);
                    musicService.updateShare(
                        share.getId(), nameBox.getText().toString(), expiresIn, context, null);
                    return null;
                  }

                  @Override
                  protected void done(Void result) {
                    refresh();
                    Util.toast(
                        context,
                        context
                            .getResources()
                            .getString(R.string.share_updated_info, share.getName()));
                  }

                  @Override
                  protected void error(Throwable error) {
                    String msg;
                    if (error instanceof OfflineException
                        || error instanceof ServerTooOldException) {
                      msg = getErrorMessage(error);
                    } else {
                      msg =
                          context
                                  .getResources()
                                  .getString(R.string.share_updated_info_error, share.getName())
                              + " "
                              + getErrorMessage(error);
                    }

                    Util.toast(context, msg, false);
                  }
                }.execute();
              }
            })
        .setNegativeButton(R.string.common_cancel, null)
        .show();
  }