Android Open Source - EnklawaPlayer Download Manager






From Project

Back to project page EnklawaPlayer.

License

The source code is released under:

GNU General Public License

If you think the Android project EnklawaPlayer listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package macbury.pod.managers.download;
/*ww w  .j  a  v a2  s  .  c o  m*/
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;

import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.ion.Ion;
import com.koushikdutta.ion.ProgressCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.concurrent.CancellationException;

import macbury.pod.db.models.Episode;
import macbury.pod.db.models.EpisodeFile;
import macbury.pod.managers.App;

/**
 * Created by macbury on 13.09.14.
 */
public class DownloadManager implements ProgressCallback, FutureCallback<File> {
  private static final String TAG = "DownloadManager";
  private final Context context;
  private final ArrayList<EpisodeFile> queue;
  private final App app;
  private final DownloadManagerListener listener;
  public static DownloadManager current;
  private DownloadEpisode currentDownload;

  public DownloadManager(Context context, DownloadManagerListener listener) {
    this.listener = listener;
    this.context  = context;
    this.app      = App.current();
    this.queue    = new ArrayList<EpisodeFile>();
    this.current  = this;
  }

  public void push(ArrayList<EpisodeFile> episodeFiles) {
    for (EpisodeFile epf : episodeFiles) {
      if (isRunning() && currentDownload.getEpisodeFileId() == epf.id) {
        Log.v(TAG, "Already downloading episode: "+ epf.episode.name);
      } else if (queue.indexOf(epf) == -1) {
        Log.v(TAG, "Pushed next episode: "+ epf.episode.name);
        queue.add(epf);
      }
    }

    if (!isRunning()) {
      Log.v(TAG, "Starting download!");
      next();
    }
  }

  private void next() {
    if (!canDownload()) {
      Log.v(TAG, "Not on wifi connection, Canceling download");
      currentDownload = null;
      queue.clear();
      finish();
    } else if (queue.size() > 0) {
      EpisodeFile epf = queue.remove(0);
      Log.v(TAG, "Fetching next episode: "+ epf.episode.name);
      app.db.episodeFiles.markAsRunning(epf);
      currentDownload = new DownloadEpisode(epf, this);
      listener.onDownloadStart(currentDownload);
    } else {
      Log.v(TAG, "Queue is clear. Finish!");
      app.db.episodeFiles.markDownloadingAsFailed();
      finish();
    }
  }

  private boolean canDownload() {
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mWifi               = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    return mWifi.isConnected();
  }

  private void finish() {
    Log.v(TAG, "Finishing...");
    listener.onDownloadManagerFinishedAll();
    current = null;
  }

  public boolean isRunning() {
    return currentDownload != null;
  }

  public void cancelEpisode(Episode episode) {
    if (isRunning() && currentDownload.getEpisodeFile().id == episode.id) {
      Log.v(TAG, "Canceling running episode::" + episode.name);
      currentDownload.getDownload().cancel();
    } else {
      Log.v(TAG, "Canceling episode:" + episode.name);
      queue.remove(episode.getFile());
    }
    app.db.episodeFiles.destroy(episode.getFile());
    Ion.getDefault(context).cancelAll();
  }

  public void cancelEpisodeById(int episodeId) {
    Log.v(TAG, "Canceling episode by id:" + episodeId);
    cancelEpisode(app.db.episodes.find(episodeId));
  }

  public void cancelAll() {
    for (EpisodeFile epf : queue) {
      app.db.episodeFiles.destroy(epf);
    }
    queue.clear();
    if (isRunning()) {
      currentDownload.getDownload().cancel();
    }
  }

  public Context getContext() {
    return context;
  }

  @Override
  public void onProgress(long downloaded, long total) {
    currentDownload.progress = (int) (((float)downloaded/(float)total) * 100);
    if (currentDownload.progress % 5 == 0) {
      listener.onDownloadProgress(currentDownload);
    }
  }

  @Override
  public void onCompleted(Exception e, File result) {
    EpisodeFile epf = currentDownload.getEpisodeFile();
    if (e != null) {
      app.db.episodeFiles.markAsFailed(epf);
      listener.onDownloadFail(currentDownload, e);
      if (CancellationException.class.isInstance(e)) {
        app.db.episodeFiles.destroy(epf);
      } else {
        Log.e(TAG, "Something failed:" +e.toString());
      }
    } else {
      Log.i(TAG, "Downloaded successul!");
      app.db.episodeFiles.markAsSuccess(epf);
      listener.onDownloadSuccess(currentDownload);
    }

    currentDownload = null;
    next();
  }

  public int size() {
    return queue.size();
  }

  public int getProgress() {
    return isRunning() ? currentDownload.progress : 0;
  }
}




Java Source Code List

macbury.pod.ApplicationTest.java
macbury.pod.activities.DonateActivity.java
macbury.pod.activities.ProgramEpisodesActivity.java
macbury.pod.activities.SettingsActivity.java
macbury.pod.activities.ext.AccentFragmentActivity.java
macbury.pod.activities.main.MainActivityActionBarToggle.java
macbury.pod.activities.main.MainActivity.java
macbury.pod.activities.main.NavigationController.java
macbury.pod.activities.main.NavigationListener.java
macbury.pod.activities.player.PlayerActivity.java
macbury.pod.activities.player.RadioActivity.java
macbury.pod.adapters.EpisodesAdapterListener.java
macbury.pod.adapters.EpisodesAdapter.java
macbury.pod.adapters.ProgramsAdapter.java
macbury.pod.api.APICategory.java
macbury.pod.api.APIEpisode.java
macbury.pod.api.APIProgram.java
macbury.pod.api.APIResponse.java
macbury.pod.api.APIThread.java
macbury.pod.db.DatabaseCRUDListener.java
macbury.pod.db.models.EnqueueEpisode.java
macbury.pod.db.models.EpisodeFile.java
macbury.pod.db.models.Episode.java
macbury.pod.db.models.ForumThread.java
macbury.pod.db.models.Program.java
macbury.pod.db.scopes.AbstractScope.java
macbury.pod.db.scopes.EnqueueEpisodeScope.java
macbury.pod.db.scopes.EpisodeFilesScope.java
macbury.pod.db.scopes.EpisodesScope.java
macbury.pod.db.scopes.ProgramsScope.java
macbury.pod.db.scopes.ThreadScope.java
macbury.pod.dialogs.EpisodeAboutDialog.java
macbury.pod.dialogs.ProgramAboutDialog.java
macbury.pod.extensions.Converter.java
macbury.pod.extensions.DateDeserializer.java
macbury.pod.extensions.SleepTimer.java
macbury.pod.fragments.SettingsFragment.java
macbury.pod.fragments.main.AbstractEpisodesFragment.java
macbury.pod.fragments.main.AllProgramsFragment.java
macbury.pod.fragments.main.EnklawaBaseAbstractListFragment.java
macbury.pod.fragments.main.episodes.DownloadedEpisodesFragment.java
macbury.pod.fragments.main.episodes.NewestEpisodesFragment.java
macbury.pod.fragments.main.episodes.PlaylistFragment.java
macbury.pod.fragments.main.episodes.ProgramEpisodesFragment.java
macbury.pod.fragments.player.ExternalPlayerFragment.java
macbury.pod.fragments.player.PlayerArtworkAndInfoFragment.java
macbury.pod.fragments.player.PlayerControllerFragment.java
macbury.pod.managers.AlarmsManager.java
macbury.pod.managers.App.java
macbury.pod.managers.BroadcastsManager.java
macbury.pod.managers.DatabaseManager.java
macbury.pod.managers.IntentManager.java
macbury.pod.managers.NotificationsManager.java
macbury.pod.managers.ServiceManager.java
macbury.pod.managers.SettingsManager.java
macbury.pod.managers.StorageManager.java
macbury.pod.managers.download.DownloadEpisode.java
macbury.pod.managers.download.DownloadManagerListener.java
macbury.pod.managers.download.DownloadManager.java
macbury.pod.managers.player.PlaybackStatus.java
macbury.pod.managers.player.PlayerManagerListener.java
macbury.pod.managers.player.PlayerManager.java
macbury.pod.managers.player.sources.AbstractMediaSource.java
macbury.pod.managers.player.sources.EpisodeMediaSource.java
macbury.pod.managers.player.sources.RadioMediaSource.java
macbury.pod.navigation_drawer.NavAdapter.java
macbury.pod.navigation_drawer.NavBaseItem.java
macbury.pod.navigation_drawer.NavDivider.java
macbury.pod.navigation_drawer.items.AllProgramsNavItem.java
macbury.pod.navigation_drawer.items.DownloadedEpisodesNavItem.java
macbury.pod.navigation_drawer.items.FavoriteProgramNavItem.java
macbury.pod.navigation_drawer.items.ForumNavItem.java
macbury.pod.navigation_drawer.items.NavItemFragment.java
macbury.pod.navigation_drawer.items.NewestEpisodesNavItem.java
macbury.pod.navigation_drawer.items.PlayQueueNavItem.java
macbury.pod.receivers.BootReceiver.java
macbury.pod.receivers.MediaButtonReceiver.java
macbury.pod.services.DownloadService.java
macbury.pod.services.PlayerService.java
macbury.pod.services.SyncPodService.java
macbury.pod.tutorial.MainActivityTutorial.java
macbury.pod.views.TappableFrameLayout.java