diff options
Diffstat (limited to 'src/de/danoeh/antennapod/activity/ItemviewActivity.java')
-rw-r--r-- | src/de/danoeh/antennapod/activity/ItemviewActivity.java | 113 |
1 files changed, 73 insertions, 40 deletions
diff --git a/src/de/danoeh/antennapod/activity/ItemviewActivity.java b/src/de/danoeh/antennapod/activity/ItemviewActivity.java index 8488d7e79..43eea93e4 100644 --- a/src/de/danoeh/antennapod/activity/ItemviewActivity.java +++ b/src/de/danoeh/antennapod/activity/ItemviewActivity.java @@ -1,7 +1,6 @@ package de.danoeh.antennapod.activity; -import java.text.DateFormat; - +import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; @@ -17,38 +16,43 @@ import android.widget.TextView; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator; -import de.danoeh.antennapod.feed.Feed; +import de.danoeh.antennapod.feed.EventDistributor; import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedManager; -import de.danoeh.antennapod.fragment.FeedlistFragment; import de.danoeh.antennapod.fragment.ItemDescriptionFragment; import de.danoeh.antennapod.fragment.ItemlistFragment; import de.danoeh.antennapod.preferences.UserPreferences; +import de.danoeh.antennapod.storage.DBReader; import de.danoeh.antennapod.storage.DownloadRequestException; +import de.danoeh.antennapod.util.QueueAccess; import de.danoeh.antennapod.util.StorageUtils; import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler; +import java.text.DateFormat; + /** Displays a single FeedItem and provides various actions */ public class ItemviewActivity extends ActionBarActivity { private static final String TAG = "ItemviewActivity"; - private FeedManager manager; - private FeedItem item; + private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED; - // Widgets - private TextView txtvTitle; - private TextView txtvPublished; + private FeedItem item; @Override public void onCreate(Bundle savedInstanceState) { setTheme(UserPreferences.getTheme()); super.onCreate(savedInstanceState); StorageUtils.checkStorageAvailability(this); - manager = FeedManager.getInstance(); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); getSupportActionBar().setDisplayShowTitleEnabled(false); - extractFeeditem(); - populateUI(); + EventDistributor.getInstance().register(contentUpdate); + + long itemId = getIntent().getLongExtra( + ItemlistFragment.EXTRA_SELECTED_FEEDITEM, -1); + if (itemId == -1) { + Log.e(TAG, "Received invalid selection of either feeditem or feed."); + } else { + loadData(itemId); + } } @Override @@ -65,28 +69,38 @@ public class ItemviewActivity extends ActionBarActivity { Log.d(TAG, "Stopping Activity"); } - /** Extracts FeedItem object the activity is supposed to display */ - private void extractFeeditem() { - long itemId = getIntent().getLongExtra( - ItemlistFragment.EXTRA_SELECTED_FEEDITEM, -1); - long feedId = getIntent().getLongExtra( - FeedlistFragment.EXTRA_SELECTED_FEED, -1); - if (itemId == -1 || feedId == -1) { - Log.e(TAG, "Received invalid selection of either feeditem or feed."); - } - Feed feed = manager.getFeed(feedId); - item = manager.getFeedItem(itemId, feed); - if (AppConfig.DEBUG) - Log.d(TAG, "Title of item is " + item.getTitle()); - if (AppConfig.DEBUG) - Log.d(TAG, "Title of feed is " + item.getFeed().getTitle()); - } + private void loadData(long itemId) { + AsyncTask<Long, Void, FeedItem> loadTask = new AsyncTask<Long, Void, FeedItem>() { + + @Override + protected FeedItem doInBackground(Long... longs) { + return DBReader.getFeedItem(ItemviewActivity.this, longs[0]); + } + + @Override + protected void onPostExecute(FeedItem feedItem) { + super.onPostExecute(feedItem); + if (feedItem != null && feedItem.getFeed() != null) { + item = feedItem; + populateUI(); + supportInvalidateOptionsMenu(); + } else { + if (feedItem == null) { + Log.e(TAG, "Error: FeedItem was null"); + } else if (feedItem.getFeed() == null) { + Log.e(TAG, "Error: Feed was null"); + } + } + } + }; + loadTask.execute(itemId); + } private void populateUI() { getSupportActionBar().setDisplayHomeAsUpEnabled(true); setContentView(R.layout.feeditemview); - txtvTitle = (TextView) findViewById(R.id.txtvItemname); - txtvPublished = (TextView) findViewById(R.id.txtvPublished); + TextView txtvTitle = (TextView) findViewById(R.id.txtvItemname); + TextView txtvPublished = (TextView) findViewById(R.id.txtvPublished); setTitle(item.getFeed().getTitle()); txtvPublished.setText(DateUtils.formatSameDayTime(item.getPubDate() @@ -105,9 +119,13 @@ public class ItemviewActivity extends ActionBarActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.feeditem, menu); - return true; + if (item != null) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.feeditem, menu); + return true; + } else { + return false; + } } @Override @@ -133,13 +151,28 @@ public class ItemviewActivity extends ActionBarActivity { @Override public boolean onPrepareOptionsMenu(final Menu menu) { return FeedItemMenuHandler.onPrepareMenu( - new FeedItemMenuHandler.MenuInterface() { + new FeedItemMenuHandler.MenuInterface() { - @Override - public void setItemVisibility(int id, boolean visible) { - menu.findItem(id).setVisible(visible); - } - }, item, true); + @Override + public void setItemVisibility(int id, boolean visible) { + menu.findItem(id).setVisible(visible); + } + }, item, true, QueueAccess.NotInQueueAccess()); } + private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { + + @Override + public void update(EventDistributor eventDistributor, Integer arg) { + if ((EVENTS & arg) != 0) { + if (AppConfig.DEBUG) + Log.d(TAG, "Received contentUpdate Intent."); + if (item != null) { + loadData(item.getId()); + } + } + } + }; + + } |