simplify ProgressListener.Event creation and use
This aims to simplify the creation and use of Event objects among classes that implement the ProgressListener Interface. This is also needed in order to split out the downloading support from various places and put it all into a centralized refs #2598 https://dev.guardianproject.info/issues/2598 https://gitorious.org/f-droid/fdroidclient/merge_requests/29
This commit is contained in:
parent
a44ce0e4e7
commit
d9f9b682d4
@ -24,9 +24,11 @@ import java.io.*;
|
||||
|
||||
import android.util.Log;
|
||||
import org.fdroid.fdroid.data.Apk;
|
||||
import org.fdroid.fdroid.net.Downloader;
|
||||
import org.fdroid.fdroid.net.HttpDownloader;
|
||||
|
||||
public class ApkDownloader extends Thread {
|
||||
private static final String TAG = "ApkDownloader";
|
||||
|
||||
public static final int EVENT_APK_DOWNLOAD_COMPLETE = 100;
|
||||
public static final int EVENT_ERROR_HASH_MISMATCH = 101;
|
||||
@ -80,11 +82,15 @@ public class ApkDownloader extends Thread {
|
||||
}
|
||||
|
||||
// If we haven't got the apk locally, we'll have to download it...
|
||||
String remoteAddress = remoteFile();
|
||||
HttpDownloader downloader = new HttpDownloader(remoteAddress, localfile);
|
||||
|
||||
HttpDownloader downloader = new HttpDownloader(remoteFile(), localfile);
|
||||
downloader.setProgressListener(listener);
|
||||
if (listener != null) {
|
||||
downloader.setProgressListener(listener,
|
||||
new ProgressListener.Event(Downloader.EVENT_PROGRESS, remoteAddress));
|
||||
}
|
||||
|
||||
Log.d("FDroid", "Downloading apk from " + remoteFile());
|
||||
Log.d(TAG, "Downloading apk from " + remoteAddress);
|
||||
int httpStatus = downloader.downloadHttpFile();
|
||||
|
||||
if (httpStatus != 200 || !localfile.exists()) {
|
||||
|
@ -1,8 +1,10 @@
|
||||
|
||||
package org.fdroid.fdroid;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
public interface ProgressListener {
|
||||
|
||||
@ -14,6 +16,7 @@ public interface ProgressListener {
|
||||
public static class Event implements Parcelable {
|
||||
|
||||
public static final int NO_VALUE = Integer.MIN_VALUE;
|
||||
public static final String PROGRESS_DATA_REPO = "repo";
|
||||
|
||||
public final int type;
|
||||
public final Bundle data;
|
||||
@ -29,27 +32,18 @@ public interface ProgressListener {
|
||||
this(type, NO_VALUE, NO_VALUE, null);
|
||||
}
|
||||
|
||||
public Event(int type, Bundle data) {
|
||||
this(type, NO_VALUE, NO_VALUE, data);
|
||||
public Event(int type, String repoAddress) {
|
||||
this(type, NO_VALUE, NO_VALUE, repoAddress);
|
||||
}
|
||||
|
||||
public Event(int type, int progress) {
|
||||
this(type, progress, NO_VALUE, null);
|
||||
}
|
||||
|
||||
public Event(int type, int progress, Bundle data) {
|
||||
this(type, NO_VALUE, NO_VALUE, data);
|
||||
}
|
||||
|
||||
public Event(int type, int progress, int total) {
|
||||
this(type, progress, total, null);
|
||||
}
|
||||
|
||||
public Event(int type, int progress, int total, Bundle data) {
|
||||
public Event(int type, int progress, int total, String repoAddress) {
|
||||
this.type = type;
|
||||
this.progress = progress;
|
||||
this.total = total;
|
||||
this.data = data == null ? new Bundle() : data;
|
||||
if (TextUtils.isEmpty(repoAddress))
|
||||
this.data = new Bundle();
|
||||
else
|
||||
this.data = createProgressData(repoAddress);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -68,7 +62,8 @@ public interface ProgressListener {
|
||||
public static final Parcelable.Creator<Event> CREATOR = new Parcelable.Creator<Event>() {
|
||||
@Override
|
||||
public Event createFromParcel(Parcel in) {
|
||||
return new Event(in.readInt(), in.readInt(), in.readInt(), in.readBundle());
|
||||
return new Event(in.readInt(), in.readInt(), in.readInt(),
|
||||
in.readBundle().getString(PROGRESS_DATA_REPO));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -77,6 +72,16 @@ public interface ProgressListener {
|
||||
}
|
||||
};
|
||||
|
||||
public String getRepoAddress() {
|
||||
return data.getString(PROGRESS_DATA_REPO);
|
||||
}
|
||||
|
||||
public static Bundle createProgressData(String repoAddress) {
|
||||
Bundle data = new Bundle();
|
||||
data.putString(PROGRESS_DATA_REPO, repoAddress);
|
||||
return data;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -19,7 +19,6 @@
|
||||
|
||||
package org.fdroid.fdroid;
|
||||
|
||||
import android.os.Bundle;
|
||||
import org.fdroid.fdroid.data.Apk;
|
||||
import org.fdroid.fdroid.data.App;
|
||||
import org.fdroid.fdroid.data.Repo;
|
||||
@ -279,12 +278,11 @@ public class RepoXMLHandler extends DefaultHandler {
|
||||
} else if (localName.equals("application") && curapp == null) {
|
||||
curapp = new App();
|
||||
curapp.id = attributes.getValue("", "id");
|
||||
Bundle progressData = RepoUpdater.createProgressData(repo.address);
|
||||
progressCounter ++;
|
||||
progressListener.onProgress(
|
||||
new ProgressListener.Event(
|
||||
RepoUpdater.PROGRESS_TYPE_PROCESS_XML, progressCounter,
|
||||
totalAppCount, progressData));
|
||||
RepoUpdater.PROGRESS_TYPE_PROCESS_XML,
|
||||
progressCounter, totalAppCount, repo.address));
|
||||
|
||||
} else if (localName.equals("package") && curapp != null && curapk == null) {
|
||||
curapk = new Apk();
|
||||
|
@ -194,7 +194,7 @@ public class UpdateService extends IntentService implements ProgressListener {
|
||||
if (message != null && message.length() > 0)
|
||||
resultData.putString(RESULT_MESSAGE, message);
|
||||
if (event == null)
|
||||
event = new Event(statusCode);
|
||||
event = new ProgressListener.Event(statusCode);
|
||||
resultData.putParcelable(RESULT_EVENT, event);
|
||||
receiver.send(statusCode, resultData);
|
||||
}
|
||||
@ -675,14 +675,13 @@ public class UpdateService extends IntentService implements ProgressListener {
|
||||
@Override
|
||||
public void onProgress(ProgressListener.Event event) {
|
||||
String message = "";
|
||||
String repoAddress = event.getRepoAddress();
|
||||
if (event.type == RepoUpdater.PROGRESS_TYPE_DOWNLOAD) {
|
||||
String repoAddress = event.data.getString(RepoUpdater.PROGRESS_DATA_REPO);
|
||||
String downloadedSize = Utils.getFriendlySize( event.progress );
|
||||
String totalSize = Utils.getFriendlySize( event.total );
|
||||
int percent = (int)((double)event.progress/event.total * 100);
|
||||
message = getString(R.string.status_download, repoAddress, downloadedSize, totalSize, percent);
|
||||
} else if (event.type == RepoUpdater.PROGRESS_TYPE_PROCESS_XML) {
|
||||
String repoAddress = event.data.getString(RepoUpdater.PROGRESS_DATA_REPO);
|
||||
message = getString(R.string.status_processing_xml, repoAddress, event.progress, event.total);
|
||||
}
|
||||
sendStatus(STATUS_INFO, message);
|
||||
|
@ -48,11 +48,6 @@ public abstract class Downloader {
|
||||
outputFile = null;
|
||||
}
|
||||
|
||||
public void setProgressListener(ProgressListener listener) {
|
||||
this.progressListener = listener;
|
||||
this.progressEvent = new ProgressListener.Event(EVENT_PROGRESS, totalDownloadSize());
|
||||
}
|
||||
|
||||
public void setProgressListener(ProgressListener progressListener,
|
||||
ProgressListener.Event progressEvent) {
|
||||
this.progressListener = progressListener;
|
||||
|
@ -2,7 +2,6 @@ package org.fdroid.fdroid.updater;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import org.fdroid.fdroid.ProgressListener;
|
||||
import org.fdroid.fdroid.RepoXMLHandler;
|
||||
@ -11,7 +10,6 @@ import org.fdroid.fdroid.data.Apk;
|
||||
import org.fdroid.fdroid.data.App;
|
||||
import org.fdroid.fdroid.data.Repo;
|
||||
import org.fdroid.fdroid.data.RepoProvider;
|
||||
import org.fdroid.fdroid.net.Downloader;
|
||||
import org.fdroid.fdroid.net.HttpDownloader;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
@ -30,7 +28,6 @@ abstract public class RepoUpdater {
|
||||
|
||||
public static final int PROGRESS_TYPE_DOWNLOAD = 1;
|
||||
public static final int PROGRESS_TYPE_PROCESS_XML = 2;
|
||||
public static final String PROGRESS_DATA_REPO = "repo";
|
||||
|
||||
public static RepoUpdater createUpdaterFor(Context ctx, Repo repo) {
|
||||
if (repo.fingerprint == null && repo.pubkey == null) {
|
||||
@ -86,17 +83,14 @@ abstract public class RepoUpdater {
|
||||
protected abstract String getIndexAddress();
|
||||
|
||||
protected HttpDownloader downloadIndex() throws UpdateException {
|
||||
Bundle progressData = createProgressData(repo.address);
|
||||
HttpDownloader downloader = null;
|
||||
try {
|
||||
downloader = new HttpDownloader(getIndexAddress(), context);
|
||||
downloader.setETag(repo.lastetag);
|
||||
|
||||
if (isInteractive()) {
|
||||
ProgressListener.Event event =
|
||||
new ProgressListener.Event(
|
||||
RepoUpdater.PROGRESS_TYPE_DOWNLOAD, progressData);
|
||||
downloader.setProgressListener(progressListener, event);
|
||||
downloader.setProgressListener(progressListener,
|
||||
new ProgressListener.Event(PROGRESS_TYPE_DOWNLOAD, repo.address));
|
||||
}
|
||||
|
||||
int status = downloader.downloadHttpFile();
|
||||
@ -139,12 +133,6 @@ abstract public class RepoUpdater {
|
||||
return downloader;
|
||||
}
|
||||
|
||||
public static Bundle createProgressData(String repoAddress) {
|
||||
Bundle data = new Bundle();
|
||||
data.putString(PROGRESS_DATA_REPO, repoAddress);
|
||||
return data;
|
||||
}
|
||||
|
||||
private int estimateAppCount(File indexFile) {
|
||||
int count = -1;
|
||||
try {
|
||||
|
Loading…
x
Reference in New Issue
Block a user