summaryrefslogtreecommitdiff
path: root/src/de/podfetcher/activity
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/podfetcher/activity')
-rw-r--r--src/de/podfetcher/activity/AddFeedActivity.java113
1 files changed, 80 insertions, 33 deletions
diff --git a/src/de/podfetcher/activity/AddFeedActivity.java b/src/de/podfetcher/activity/AddFeedActivity.java
index 53c81c0e3..985008df8 100644
--- a/src/de/podfetcher/activity/AddFeedActivity.java
+++ b/src/de/podfetcher/activity/AddFeedActivity.java
@@ -5,12 +5,18 @@ import android.widget.Button;
import android.widget.EditText;
import android.view.View;
import android.app.ProgressDialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.util.Log;
import de.podfetcher.R;
import de.podfetcher.feed.Feed;
+import de.podfetcher.feed.FeedManager;
import de.podfetcher.storage.DownloadRequester;
import de.podfetcher.util.URLChecker;
import de.podfetcher.service.DownloadObserver;
+import de.podfetcher.service.DownloadService;
import de.podfetcher.service.DownloadStatus;
import com.actionbarsherlock.app.SherlockActivity;
@@ -26,36 +32,37 @@ public class AddFeedActivity extends SherlockActivity {
private static final String TAG = "AddFeedActivity";
private DownloadRequester requester;
-
+ private FeedManager manager;
+
private EditText etxtFeedurl;
private Button butConfirm;
private Button butCancel;
private long downloadId;
-
- private DownloadObserver observer;
-
- private ProgressDialog progDialog;
-
+ private boolean hasImage;
+ private boolean isWaitingForImage = false;
+ private long imageDownloadId;
+
+ private ProgressDialog progDialog;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addfeed);
requester = DownloadRequester.getInstance();
+ manager = FeedManager.getInstance();
- createObserver();
progDialog = new ProgressDialog(this) {
@Override
public void onBackPressed() {
requester.cancelDownload(getContext(), downloadId);
- observer.cancel(true);
- createObserver();
+ unregisterReceiver(downloadCompleted);
dismiss();
}
-
+
};
-
+
etxtFeedurl = (EditText) findViewById(R.id.etxtFeedurl);
butConfirm = (Button) findViewById(R.id.butConfirm);
butCancel = (Button) findViewById(R.id.butCancel);
@@ -63,7 +70,7 @@ public class AddFeedActivity extends SherlockActivity {
butConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- addNewFeed();
+ addNewFeed();
}
});
@@ -75,36 +82,18 @@ public class AddFeedActivity extends SherlockActivity {
}
});
}
-
- private void createObserver() {
- observer = new DownloadObserver(this) {
- @Override
- protected void onPostExecute(Boolean result) {
- progDialog.dismiss();
- finish();
- }
- @Override
- protected void onProgressUpdate(DownloadStatus... values) {
- DownloadStatus progr = values[0];
- progDialog.setMessage(getContext().getString(progr.getStatusMsg())
- + " (" + progr.getProgressPercent() + "%)");
- }
- };
- }
-
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "Stopping Activity");
- observer.cancel(true);
}
private void addNewFeed() {
- String url = etxtFeedurl.getText().toString();
+ String url = etxtFeedurl.getText().toString();
url = URLChecker.prepareURL(url);
- if(url != null) {
+ if (url != null) {
Feed feed = new Feed(url, new Date());
downloadId = requester.downloadFeed(this, feed);
observeDownload(feed);
@@ -113,7 +102,65 @@ public class AddFeedActivity extends SherlockActivity {
private void observeDownload(Feed feed) {
progDialog.show();
- observer.execute(feed);
+ progDialog.setMessage("Downloading Feed");
+ registerReceiver(downloadCompleted, new IntentFilter(DownloadService.ACTION_DOWNLOAD_HANDLED));
+ }
+
+ private void updateProgDialog(final String msg) {
+ if (progDialog.isShowing()) {
+ runOnUiThread(new Runnable() {
+
+ @Override
+ public void run() {
+ progDialog.setMessage(msg);
+
+ }
+
+ });
+ }
+ }
+
+ private void handleDownloadError(DownloadStatus status) {
+
}
+ private BroadcastReceiver downloadCompleted = new BroadcastReceiver() {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ long receivedDownloadId = intent.getLongExtra(
+ DownloadService.EXTRA_DOWNLOAD_ID, -1);
+ if (receivedDownloadId == downloadId
+ || (isWaitingForImage && receivedDownloadId == imageDownloadId)) {
+ long statusId = intent.getLongExtra(
+ DownloadService.EXTRA_STATUS_ID, 0);
+ DownloadStatus status = manager.getDownloadStatus(statusId);
+ if (status.isSuccessful()) {
+ if (!isWaitingForImage) {
+ hasImage = intent.getBooleanExtra(
+ DownloadService.EXTRA_FEED_HAS_IMAGE, false);
+ if (!hasImage) {
+ progDialog.dismiss();
+ finish();
+ } else {
+ imageDownloadId = intent
+ .getLongExtra(
+ DownloadService.EXTRA_IMAGE_DOWNLOAD_ID,
+ -1);
+ isWaitingForImage = true;
+ updateProgDialog("Downloading Image");
+ }
+ } else {
+ progDialog.dismiss();
+ finish();
+ }
+ } else {
+ handleDownloadError(status);
+ }
+ }
+
+ }
+
+ };
+
}