content: package net.nullsum.audinaut.util;
  
  import android.app.ProgressDialog;
  
  import androidx.appcompat.app.AppCompatActivity;
  
  import net.nullsum.audinaut.activity.SubsonicActivity;
  
  /**
   * @author Sindre Mehus
   * @version $Id$
   */
  public abstract class LoadingTask<T> extends BackgroundTask<T> {
  
      private final AppCompatActivity tabActivity;
      private final boolean cancellable;
      private ProgressDialog loading;
  
      public LoadingTask(AppCompatActivity activity) {
          super(activity);
          tabActivity = activity;
          this.cancellable = true;
      }
  
      public LoadingTask(AppCompatActivity activity, final boolean cancellable) {
          super(activity);
          tabActivity = activity;
          this.cancellable = cancellable;
      }
  
      @Override
      public void execute() {
          loading = ProgressDialog.show(tabActivity, "", "Loading. Please Wait...", true, cancellable, dialog -> cancel());
  
          queue.offer(task = new Task() {
              @Override
              public void onDone(T result) {
                  if (loading.isShowing()) {
                      loading.dismiss();
                  }
                  done(result);
              }
  
              @Override
              public void onError(Throwable t) {
                  if (loading.isShowing()) {
                      loading.dismiss();
                  }
                  error(t);
              }
          });
      }
  
      @Override
      public boolean isCancelled() {
          return (tabActivity instanceof SubsonicActivity && ((SubsonicActivity) tabActivity).isDestroyedCompat()) || cancelled.get();
      }
  
      @Override
      public void updateProgress(final String message) {
          if (!cancelled.get()) {
              getHandler().post(() -> loading.setMessage(message));
          }
      }
  }
  