diff options
Diffstat (limited to 'src/de/podfetcher/activity')
-rw-r--r-- | src/de/podfetcher/activity/AddFeedActivity.java | 113 |
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); + } + } + + } + + }; + } |