summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java24
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java11
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java58
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java442
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java50
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java36
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java29
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java81
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java40
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java57
11 files changed, 584 insertions, 245 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
index 645e7ebd9..d63d66966 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
@@ -8,17 +8,17 @@ import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ListView;
+import java.util.List;
+
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.DownloadedEpisodesListAdapter;
-import de.danoeh.antennapod.dialog.FeedItemDialog;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.util.QueueAccess;
-import java.util.List;
-
/**
* Displays all running downloads and provides a button to delete them
*/
@@ -36,8 +36,6 @@ public class CompletedDownloadsFragment extends ListFragment {
private boolean viewCreated = false;
private boolean itemsLoaded = false;
- private FeedItemDialog feedItemDialog;
-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -69,7 +67,6 @@ public class CompletedDownloadsFragment extends ListFragment {
super.onDestroyView();
listAdapter = null;
viewCreated = false;
- feedItemDialog = null;
stopItemLoader();
}
@@ -102,8 +99,7 @@ public class CompletedDownloadsFragment extends ListFragment {
super.onListItemClick(l, v, position, id);
FeedItem item = listAdapter.getItem(position - l.getHeaderViewsCount());
if (item != null) {
- feedItemDialog = FeedItemDialog.newInstance(getActivity(), item, queue);
- feedItemDialog.show();
+ ((MainActivity) getActivity()).loadChildFragment(ItemFragment.newInstance(item.getId()));
}
}
@@ -115,12 +111,6 @@ public class CompletedDownloadsFragment extends ListFragment {
}
setListShown(true);
listAdapter.notifyDataSetChanged();
- if (feedItemDialog != null) {
- boolean res = feedItemDialog.updateContent(queue, items);
- if (!res && feedItemDialog.isShowing()) {
- feedItemDialog.dismiss();
- }
- }
}
private DownloadedEpisodesListAdapter.ItemAccess itemAccess = new DownloadedEpisodesListAdapter.ItemAccess() {
@@ -143,11 +133,7 @@ public class CompletedDownloadsFragment extends ListFragment {
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
- if ((arg & EventDistributor.DOWNLOAD_QUEUED) != 0) {
- if (feedItemDialog != null && feedItemDialog.isShowing()) {
- feedItemDialog.updateMenuAppearance();
- }
- } else if ((arg & EVENTS) != 0) {
+ if ((arg & EVENTS) != 0) {
startItemLoader();
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
index efe3e7ab4..3076f8136 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
@@ -1,5 +1,6 @@
package de.danoeh.antennapod.fragment;
+import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@@ -13,6 +14,7 @@ import com.squareup.picasso.Picasso;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.activity.AudioplayerActivity;
import de.danoeh.antennapod.activity.AudioplayerActivity.AudioplayerContentFragment;
import de.danoeh.antennapod.core.util.playback.Playable;
@@ -57,6 +59,15 @@ public class CoverFragment extends Fragment implements
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.cover_fragment, container, false);
imgvCover = (ImageView) root.findViewById(R.id.imgvCover);
+ imgvCover.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Activity activity = getActivity();
+ if (activity != null && activity instanceof AudioplayerActivity) {
+ ((AudioplayerActivity)activity).switchToLastFragment();
+ }
+ }
+ });
viewCreated = true;
return root;
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java
index 5a71cb36b..712db1421 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java
@@ -1,19 +1,16 @@
package de.danoeh.antennapod.fragment;
-import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
-import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
-import android.support.v7.app.ActionBar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+
import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.MainActivity;
/**
* Shows the CompletedDownloadsFragment and the RunningDownloadsFragment
@@ -27,7 +24,6 @@ public class DownloadsFragment extends Fragment {
public static final int POS_LOG = 2;
private ViewPager pager;
- private MainActivity activity;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -36,42 +32,6 @@ public class DownloadsFragment extends Fragment {
pager = (ViewPager) root.findViewById(R.id.pager);
DownloadsPagerAdapter pagerAdapter = new DownloadsPagerAdapter(getChildFragmentManager(), getResources());
pager.setAdapter(pagerAdapter);
- final ActionBar actionBar = activity.getMainActivtyActionBar();
- actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
- ActionBar.TabListener tabListener = new ActionBar.TabListener() {
- @Override
- public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
- pager.setCurrentItem(tab.getPosition());
- }
-
- @Override
- public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-
- }
-
- @Override
- public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-
- }
- };
- actionBar.removeAllTabs();
- actionBar.addTab(actionBar.newTab()
- .setText(R.string.downloads_running_label)
- .setTabListener(tabListener));
- actionBar.addTab(actionBar.newTab()
- .setText(R.string.downloads_completed_label)
- .setTabListener(tabListener));
- actionBar.addTab(actionBar.newTab()
- .setText(R.string.downloads_log_label)
- .setTabListener(tabListener));
-
- pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
- @Override
- public void onPageSelected(int position) {
- super.onPageSelected(position);
- actionBar.setSelectedNavigationItem(position);
- }
- });
return root;
}
@@ -84,24 +44,8 @@ public class DownloadsFragment extends Fragment {
}
}
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- this.activity = (MainActivity) activity;
- }
-
- @Override
- public void onDetach() {
- super.onDetach();
- activity.getMainActivtyActionBar().removeAllTabs();
- activity.getMainActivtyActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
- }
-
public class DownloadsPagerAdapter extends FragmentPagerAdapter {
-
-
-
Resources resources;
public DownloadsPagerAdapter(FragmentManager fm, Resources resources) {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
index c0222de8e..a7c6d62e6 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
@@ -12,7 +12,6 @@ import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
-import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
new file mode 100644
index 000000000..ac9e744ed
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
@@ -0,0 +1,442 @@
+package de.danoeh.antennapod.fragment;
+
+import android.annotation.TargetApi;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.content.res.TypedArray;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.LoaderManager;
+import android.support.v4.content.Loader;
+import android.support.v4.util.Pair;
+import android.support.v7.widget.PopupMenu;
+import android.support.v7.widget.Toolbar;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.Button;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.squareup.picasso.Picasso;
+
+import java.util.List;
+
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.activity.MainActivity;
+import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
+import de.danoeh.antennapod.core.asynctask.DBTaskLoader;
+import de.danoeh.antennapod.core.asynctask.DownloadObserver;
+import de.danoeh.antennapod.core.feed.EventDistributor;
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.service.download.Downloader;
+import de.danoeh.antennapod.core.storage.DBReader;
+import de.danoeh.antennapod.core.storage.DBTasks;
+import de.danoeh.antennapod.core.storage.DBWriter;
+import de.danoeh.antennapod.core.storage.DownloadRequestException;
+import de.danoeh.antennapod.core.storage.DownloadRequester;
+import de.danoeh.antennapod.core.util.QueueAccess;
+import de.danoeh.antennapod.core.util.playback.Timeline;
+import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
+
+/**
+ * Displays information about a FeedItem and actions.
+ */
+public class ItemFragment extends Fragment implements LoaderManager.LoaderCallbacks<Pair<FeedItem, QueueAccess>> {
+
+ private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED |
+ EventDistributor.DOWNLOAD_QUEUED |
+ EventDistributor.QUEUE_UPDATE |
+ EventDistributor.UNREAD_ITEMS_UPDATE;
+
+ private static final String ARG_FEEDITEM = "feeditem";
+
+ /**
+ * Creates a new instance of an ItemFragment
+ *
+ * @param feeditem The ID of the FeedItem that should be displayed.
+ * @return The ItemFragment instance
+ */
+ public static ItemFragment newInstance(long feeditem) {
+ ItemFragment fragment = new ItemFragment();
+ Bundle args = new Bundle();
+ args.putLong(ARG_FEEDITEM, feeditem);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ private boolean itemsLoaded = false;
+ private long itemID;
+ private FeedItem item;
+ private QueueAccess queue;
+ private String webviewData;
+ private DownloadObserver downloadObserver;
+ private List<Downloader> downloaderList;
+
+ private ViewGroup root;
+ private View header;
+ private WebView webvDescription;
+ private TextView txtvTitle;
+ private ImageView imgvCover;
+ private ProgressBar progbarDownload;
+ private ProgressBar progbarLoading;
+ private Button butAction1;
+ private Button butAction2;
+ private ImageButton butMore;
+ private PopupMenu popupMenu;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setRetainInstance(true);
+ setHasOptionsMenu(false);
+
+ itemID = getArguments().getLong(ARG_FEEDITEM, -1);
+ }
+
+ @Override
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ getLoaderManager().initLoader(0, null, this);
+ Toolbar toolbar = ((MainActivity) getActivity()).getToolbar();
+ toolbar.addView(header);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ EventDistributor.getInstance().register(contentUpdate);
+ if (downloadObserver != null) {
+ downloadObserver.setActivity(getActivity());
+ downloadObserver.onResume();
+ }
+ if (itemsLoaded) {
+ onFragmentLoaded();
+ }
+
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ EventDistributor.getInstance().unregister(contentUpdate);
+ }
+
+ private void resetViewState() {
+ if (downloadObserver != null) {
+ downloadObserver.onPause();
+ }
+ Toolbar toolbar = ((MainActivity) getActivity()).getToolbar();
+ toolbar.removeView(header);
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ resetViewState();
+ if (webvDescription != null && root != null) {
+ root.removeView(webvDescription);
+ webvDescription.destroy();
+ }
+ }
+
+
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ super.onCreateView(inflater, container, savedInstanceState);
+ ((MainActivity) getActivity()).getSupportActionBar().setTitle("");
+ Toolbar toolbar = ((MainActivity) getActivity()).getToolbar();
+ View layout = inflater.inflate(R.layout.feeditem_fragment, container, false);
+
+ header = inflater.inflate(R.layout.feeditem_fragment_header, toolbar, false);
+ root = (ViewGroup) layout.findViewById(R.id.content_root);
+ txtvTitle = (TextView) header.findViewById(R.id.txtvTitle);
+ if (Build.VERSION.SDK_INT >= 14) { // ellipsize is causing problems on old versions, see #448
+ txtvTitle.setEllipsize(TextUtils.TruncateAt.END);
+ }
+ webvDescription = (WebView) layout.findViewById(R.id.webvDescription);
+ if (UserPreferences.getTheme() == R.style.Theme_AntennaPod_Dark) {
+ if (Build.VERSION.SDK_INT >= 11
+ && Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
+ webvDescription.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+ }
+ webvDescription.setBackgroundColor(getResources().getColor(
+ R.color.black));
+ }
+ webvDescription.getSettings().setUseWideViewPort(false);
+ webvDescription.getSettings().setLayoutAlgorithm(
+ WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
+ webvDescription.getSettings().setLoadWithOverviewMode(true);
+ webvDescription.setWebViewClient(new WebViewClient() {
+
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ try {
+ startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ e.printStackTrace();
+ return true;
+ }
+ return true;
+ }
+ });
+
+ imgvCover = (ImageView) header.findViewById(R.id.imgvCover);
+ progbarDownload = (ProgressBar) header.findViewById(R.id.progbarDownload);
+ progbarLoading = (ProgressBar) layout.findViewById(R.id.progbarLoading);
+ butAction1 = (Button) header.findViewById(R.id.butAction1);
+ butAction2 = (Button) header.findViewById(R.id.butAction2);
+ butMore = (ImageButton) header.findViewById(R.id.butMoreActions);
+ popupMenu = new PopupMenu(getActivity(), butMore);
+
+ butAction1.setOnClickListener(new View.OnClickListener() {
+ DefaultActionButtonCallback actionButtonCallback = new DefaultActionButtonCallback(getActivity());
+
+ @Override
+
+ public void onClick(View v) {
+ if (item == null) {
+ return;
+ }
+ actionButtonCallback.onActionButtonPressed(item);
+ FeedMedia media = item.getMedia();
+ if (media != null && media.isDownloaded()) {
+ // playback was started, dialog should close itself
+ ((MainActivity) getActivity()).dismissChildFragment();
+ }
+ }
+
+
+ }
+ );
+
+ butAction2.setOnClickListener(new View.OnClickListener()
+
+ {
+ @Override
+ public void onClick(View v) {
+ if (item == null) {
+ return;
+ }
+
+ if (item.hasMedia()) {
+ FeedMedia media = item.getMedia();
+ if (!media.isDownloaded()) {
+ DBTasks.playMedia(getActivity(), media, true, true, true);
+ ((MainActivity) getActivity()).dismissChildFragment();
+ } else {
+ DBWriter.deleteFeedMediaOfItem(getActivity(), media.getId());
+ }
+ } else if (item.getLink() != null) {
+ Uri uri = Uri.parse(item.getLink());
+ getActivity().startActivity(new Intent(Intent.ACTION_VIEW, uri));
+ }
+ }
+ }
+ );
+
+ butMore.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (item == null) {
+ return;
+ }
+ popupMenu.getMenu().clear();
+ popupMenu.inflate(R.menu.feeditem_dialog);
+ if (item.hasMedia()) {
+ FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, true, queue);
+ } else {
+ // these are already available via button1 and button2
+ FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, true, queue,
+ R.id.mark_read_item, R.id.visit_website_item);
+ }
+ popupMenu.show();
+ }
+ }
+ );
+
+ popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem menuItem) {
+
+ try {
+ return FeedItemMenuHandler.onMenuItemClicked(getActivity(), menuItem.getItemId(), item);
+ } catch (DownloadRequestException e) {
+ e.printStackTrace();
+ Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
+ return true;
+ }
+ }
+ }
+ );
+
+ return layout;
+ }
+
+ private final FeedItemMenuHandler.MenuInterface popupMenuInterface = new FeedItemMenuHandler.MenuInterface() {
+ @Override
+ public void setItemVisibility(int id, boolean visible) {
+ MenuItem item = popupMenu.getMenu().findItem(id);
+ if (item != null) {
+ item.setVisible(visible);
+ }
+ }
+ };
+
+
+ private void onFragmentLoaded() {
+ progbarLoading.setVisibility(View.GONE);
+ if (webviewData != null) {
+ webvDescription.loadDataWithBaseURL(null, webviewData, "text/html",
+ "utf-8", "about:blank");
+ }
+ updateAppearance();
+ downloadObserver = new DownloadObserver(getActivity(), new Handler(), downloadObserverCallback);
+ downloadObserver.onResume();
+ }
+
+ private void updateAppearance() {
+ txtvTitle.setText(item.getTitle());
+ Picasso.with(getActivity()).load(item.getImageUri())
+ .fit()
+ .into(imgvCover);
+ progbarDownload.setVisibility(View.GONE);
+ if (item.hasMedia() && downloaderList != null) {
+ for (Downloader downloader : downloaderList) {
+ if (downloader.getDownloadRequest().getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA
+ && downloader.getDownloadRequest().getFeedfileId() == item.getMedia().getId()) {
+ progbarDownload.setVisibility(View.VISIBLE);
+ progbarDownload.setProgress(downloader.getDownloadRequest().getProgressPercent());
+ }
+ }
+ }
+
+ FeedMedia media = item.getMedia();
+ if (media == null) {
+ TypedArray drawables = getActivity().obtainStyledAttributes(new int[]{R.attr.navigation_accept,
+ R.attr.location_web_site});
+
+ if (!item.isRead()) {
+ butAction1.setCompoundDrawablesWithIntrinsicBounds(drawables.getDrawable(0), null, null, null);
+ butAction1.setText(getActivity().getString(R.string.mark_read_label));
+ butAction1.setVisibility(View.VISIBLE);
+ } else {
+ butAction1.setVisibility(View.INVISIBLE);
+ }
+
+ if (item.getLink() != null) {
+ butAction2.setCompoundDrawablesWithIntrinsicBounds(drawables.getDrawable(1), null, null, null);
+ butAction2.setText(getActivity().getString(R.string.visit_website_label));
+ } else {
+ butAction2.setEnabled(false);
+ }
+
+ drawables.recycle();
+ } else {
+ boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media);
+ TypedArray drawables = getActivity().obtainStyledAttributes(new int[]{R.attr.av_play,
+ R.attr.av_download, R.attr.action_stream, R.attr.content_discard, R.attr.navigation_cancel});
+
+ if (!media.isDownloaded()) {
+ butAction2.setCompoundDrawablesWithIntrinsicBounds(drawables.getDrawable(2), null, null, null);
+ butAction2.setText(getActivity().getString(R.string.stream_label));
+ } else {
+ butAction2.setCompoundDrawablesWithIntrinsicBounds(drawables.getDrawable(3), null, null, null);
+ butAction2.setText(getActivity().getString(R.string.remove_episode_lable));
+ }
+
+ if (isDownloading) {
+ butAction1.setCompoundDrawablesWithIntrinsicBounds(drawables.getDrawable(4), null, null, null);
+ butAction1.setText(getActivity().getString(R.string.cancel_download_label));
+ } else if (media.isDownloaded()) {
+ butAction1.setCompoundDrawablesWithIntrinsicBounds(drawables.getDrawable(0), null, null, null);
+ butAction1.setText(getActivity().getString(R.string.play_label));
+ } else {
+ butAction1.setCompoundDrawablesWithIntrinsicBounds(drawables.getDrawable(1), null, null, null);
+ butAction1.setText(getActivity().getString(R.string.download_label));
+ }
+
+ drawables.recycle();
+ }
+ }
+
+
+ @Override
+ public Loader<Pair<FeedItem, QueueAccess>> onCreateLoader(int id, Bundle args) {
+ return new DBTaskLoader<Pair<FeedItem, QueueAccess>>(getActivity()) {
+ @Override
+ public Pair<FeedItem, QueueAccess> loadInBackground() {
+ FeedItem data1 = DBReader.getFeedItem(getContext(), itemID);
+ if (data1 != null) {
+ Timeline t = new Timeline(getActivity(), data1);
+ webviewData = t.processShownotes(false);
+ }
+ QueueAccess data2 = QueueAccess.IDListAccess(DBReader.getQueueIDList(getContext()));
+ return Pair.create(data1, data2);
+ }
+ };
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Pair<FeedItem, QueueAccess>> loader, Pair<FeedItem, QueueAccess> data) {
+
+ if (data != null) {
+ item = data.first;
+ queue = data.second;
+ if (!itemsLoaded) {
+ itemsLoaded = true;
+ onFragmentLoaded();
+ } else {
+ updateAppearance();
+ }
+ }
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Pair<FeedItem, QueueAccess>> loader) {
+
+ }
+
+ private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
+ @Override
+ public void update(EventDistributor eventDistributor, Integer arg) {
+ if ((arg & EVENTS) != 0) {
+ getLoaderManager().restartLoader(0, null, ItemFragment.this);
+ }
+ }
+ };
+
+ private final DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() {
+
+ @Override
+ public void onContentChanged() {
+ if (itemsLoaded && getActivity() != null) {
+ updateAppearance();
+ }
+ }
+
+ @Override
+ public void onDownloadDataAvailable(List<Downloader> downloaderList) {
+ ItemFragment.this.downloaderList = downloaderList;
+ if (itemsLoaded && getActivity() != null) {
+ updateAppearance();
+ }
+ }
+ };
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
index be9a9c12d..5312beeeb 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.ListFragment;
@@ -18,6 +19,7 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
+import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
@@ -35,6 +37,7 @@ import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
import de.danoeh.antennapod.adapter.FeedItemlistAdapter;
import de.danoeh.antennapod.core.asynctask.DownloadObserver;
import de.danoeh.antennapod.core.asynctask.FeedRemover;
+import de.danoeh.antennapod.core.asynctask.PicassoProvider;
import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
import de.danoeh.antennapod.core.feed.EventDistributor;
@@ -49,7 +52,6 @@ import de.danoeh.antennapod.core.storage.DownloadRequestException;
import de.danoeh.antennapod.core.storage.DownloadRequester;
import de.danoeh.antennapod.core.util.QueueAccess;
import de.danoeh.antennapod.core.util.gui.MoreContentListFooterUtil;
-import de.danoeh.antennapod.dialog.FeedItemDialog;
import de.danoeh.antennapod.menuhandler.FeedMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
@@ -81,9 +83,6 @@ public class ItemlistFragment extends ListFragment {
private DownloadObserver downloadObserver;
private List<Downloader> downloaderList;
- private FeedItemDialog feedItemDialog;
- private FeedItemDialog.FeedItemDialogSavedInstance feedItemDialogSavedInstance;
-
private MoreContentListFooterUtil listFooter;
private boolean isUpdatingFeed;
@@ -156,13 +155,10 @@ public class ItemlistFragment extends ListFragment {
private void resetViewState() {
adapter = null;
viewsCreated = false;
+ listFooter = null;
if (downloadObserver != null) {
downloadObserver.onPause();
}
- if (feedItemDialog != null) {
- feedItemDialogSavedInstance = feedItemDialog.save();
- }
- feedItemDialog = null;
}
private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = new MenuItemUtils.UpdateRefreshMenuItemChecker() {
@@ -259,6 +255,15 @@ public class ItemlistFragment extends ListFragment {
}
@Override
+ public void setListAdapter(ListAdapter adapter) {
+ // This workaround prevents the ListFragment from setting a list adapter when its state is restored.
+ // This is only necessary on API 10 because addFooterView throws an internal exception in this case.
+ if (Build.VERSION.SDK_INT > 10 || insideOnFragmentLoaded) {
+ super.setListAdapter(adapter);
+ }
+ }
+
+ @Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle("");
@@ -272,8 +277,9 @@ public class ItemlistFragment extends ListFragment {
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
FeedItem selection = adapter.getItem(position - l.getHeaderViewsCount());
- feedItemDialog = FeedItemDialog.newInstance(getActivity(), selection, queue);
- feedItemDialog.show();
+ if (selection != null) {
+ ((MainActivity) getActivity()).loadChildFragment(ItemFragment.newInstance(selection.getId()));
+ }
}
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
@@ -303,9 +309,12 @@ public class ItemlistFragment extends ListFragment {
}
+ private boolean insideOnFragmentLoaded = false;
+
private void onFragmentLoaded() {
+ insideOnFragmentLoaded = true;
if (adapter == null) {
- getListView().setAdapter(null);
+ setListAdapter(null);
setupHeaderView();
setupFooterView();
adapter = new FeedItemlistAdapter(getActivity(), itemAccess, new DefaultActionButtonCallback(getActivity()), false);
@@ -316,17 +325,14 @@ public class ItemlistFragment extends ListFragment {
setListShown(true);
adapter.notifyDataSetChanged();
- if (feedItemDialog != null) {
- feedItemDialog.updateContent(queue, feed.getItems());
- } else if (feedItemDialogSavedInstance != null) {
- feedItemDialog = FeedItemDialog.newInstance(getActivity(), feedItemDialogSavedInstance);
- }
getActivity().supportInvalidateOptionsMenu();
if (feed != null && feed.getNextPageLink() == null && listFooter != null) {
getListView().removeFooterView(listFooter.getRoot());
}
+ insideOnFragmentLoaded = false;
+
}
private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() {
@@ -335,9 +341,6 @@ public class ItemlistFragment extends ListFragment {
if (adapter != null) {
adapter.notifyDataSetChanged();
}
- if (feedItemDialog != null && feedItemDialog.isShowing()) {
- feedItemDialog.updateMenuAppearance();
- }
}
@Override
@@ -362,6 +365,7 @@ public class ItemlistFragment extends ListFragment {
TextView txtvTitle = (TextView) header.findViewById(R.id.txtvTitle);
TextView txtvAuthor = (TextView) header.findViewById(R.id.txtvAuthor);
+ ImageView imgvBackground = (ImageView) header.findViewById(R.id.imgvBackground);
ImageView imgvCover = (ImageView) header.findViewById(R.id.imgvCover);
ImageButton butShowInfo = (ImageButton) header.findViewById(R.id.butShowInfo);
@@ -370,6 +374,14 @@ public class ItemlistFragment extends ListFragment {
Picasso.with(getActivity())
.load(feed.getImageUri())
+ .placeholder(R.color.image_readability_tint)
+ .error(R.color.image_readability_tint)
+ .transform(PicassoProvider.blurTransformation)
+ .resize(PicassoProvider.BLUR_IMAGE_SIZE, PicassoProvider.BLUR_IMAGE_SIZE)
+ .into(imgvBackground);
+
+ Picasso.with(getActivity())
+ .load(feed.getImageUri())
.fit()
.into(imgvCover);
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
index d423c335a..d97ede0ef 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
@@ -7,21 +7,28 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
-import android.support.v4.view.MenuItemCompat;
-import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
-import android.view.*;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
+
import com.mobeta.android.dslv.DragSortListView;
+
+import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
+
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
import de.danoeh.antennapod.adapter.NewEpisodesListAdapter;
import de.danoeh.antennapod.core.asynctask.DownloadObserver;
-import de.danoeh.antennapod.dialog.FeedItemDialog;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
@@ -37,9 +44,6 @@ import de.danoeh.antennapod.core.util.QueueAccess;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-
/**
* Shows unread or recently published episodes
*/
@@ -73,9 +77,6 @@ public class NewEpisodesFragment extends Fragment {
private DownloadObserver downloadObserver = null;
- private FeedItemDialog feedItemDialog;
- private FeedItemDialog.FeedItemDialogSavedInstance feedItemDialogSavedInstance;
-
private boolean isUpdatingFeeds;
@Override
@@ -133,10 +134,6 @@ public class NewEpisodesFragment extends Fragment {
if (downloadObserver != null) {
downloadObserver.onPause();
}
- if (feedItemDialog != null) {
- feedItemDialogSavedInstance = feedItemDialog.save();
- }
- feedItemDialog = null;
}
@@ -226,8 +223,7 @@ public class NewEpisodesFragment extends Fragment {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FeedItem item = (FeedItem) listAdapter.getItem(position - listView.getHeaderViewsCount());
if (item != null) {
- feedItemDialog = FeedItemDialog.newInstance(activity.get(), item, queueAccess);
- feedItemDialog.show();
+ ((MainActivity) getActivity()).loadChildFragment(ItemFragment.newInstance(item.getId()));
}
}
@@ -257,11 +253,6 @@ public class NewEpisodesFragment extends Fragment {
downloadObserver = new DownloadObserver(activity.get(), new Handler(), downloadObserverCallback);
downloadObserver.onResume();
}
- if (feedItemDialog != null) {
- feedItemDialog.updateContent(queueAccess, unreadItems, recentItems);
- } else if (feedItemDialogSavedInstance != null) {
- feedItemDialog = FeedItemDialog.newInstance(activity.get(), feedItemDialogSavedInstance);
- }
listAdapter.notifyDataSetChanged();
getActivity().supportInvalidateOptionsMenu();
updateShowOnlyEpisodesListViewState();
@@ -273,9 +264,6 @@ public class NewEpisodesFragment extends Fragment {
if (listAdapter != null) {
listAdapter.notifyDataSetChanged();
}
- if (feedItemDialog != null && feedItemDialog.isShowing()) {
- feedItemDialog.updateMenuAppearance();
- }
}
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
index e226c5c4f..f6d2d5d07 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
@@ -13,11 +13,15 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
+
+import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
+
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
import de.danoeh.antennapod.adapter.FeedItemlistAdapter;
import de.danoeh.antennapod.core.asynctask.DownloadObserver;
-import de.danoeh.antennapod.dialog.FeedItemDialog;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
@@ -28,9 +32,6 @@ import de.danoeh.antennapod.core.util.QueueAccess;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-
public class PlaybackHistoryFragment extends ListFragment {
private static final String TAG = "PlaybackHistoryFragment";
@@ -46,9 +47,6 @@ public class PlaybackHistoryFragment extends ListFragment {
private DownloadObserver downloadObserver;
private List<Downloader> downloaderList;
- private FeedItemDialog feedItemDialog;
- private FeedItemDialog.FeedItemDialogSavedInstance feedItemDialogSavedInstance;
-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -103,10 +101,6 @@ public class PlaybackHistoryFragment extends ListFragment {
if (downloadObserver != null) {
downloadObserver.onPause();
}
- if (feedItemDialog != null) {
- feedItemDialogSavedInstance = feedItemDialog.save();
- }
- feedItemDialog = null;
}
@Override
@@ -130,8 +124,7 @@ public class PlaybackHistoryFragment extends ListFragment {
super.onListItemClick(l, v, position, id);
FeedItem item = adapter.getItem(position - l.getHeaderViewsCount());
if (item != null) {
- feedItemDialog = FeedItemDialog.newInstance(activity.get(), item, queue);
- feedItemDialog.show();
+ ((MainActivity) getActivity()).loadChildFragment(ItemFragment.newInstance(item.getId()));
}
}
@@ -158,7 +151,7 @@ public class PlaybackHistoryFragment extends ListFragment {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (!super.onOptionsItemSelected(item)) {
- switch(item.getItemId()) {
+ switch (item.getItemId()) {
case R.id.clear_history_item:
DBWriter.clearPlaybackHistory(getActivity());
return true;
@@ -190,11 +183,6 @@ public class PlaybackHistoryFragment extends ListFragment {
}
setListShown(true);
adapter.notifyDataSetChanged();
- if (feedItemDialog != null && feedItemDialog.isShowing()) {
- feedItemDialog.updateContent(queue, playbackHistory);
- } else if (feedItemDialogSavedInstance != null) {
- feedItemDialog = FeedItemDialog.newInstance(activity.get(), feedItemDialogSavedInstance);
- }
getActivity().supportInvalidateOptionsMenu();
}
@@ -204,9 +192,6 @@ public class PlaybackHistoryFragment extends ListFragment {
if (adapter != null) {
adapter.notifyDataSetChanged();
}
- if (feedItemDialog != null && feedItemDialog.isShowing()) {
- feedItemDialog.updateMenuAppearance();
- }
}
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
index 3192a84de..ca8543b4c 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -3,6 +3,7 @@ package de.danoeh.antennapod.fragment;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
@@ -29,14 +30,17 @@ import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
import de.danoeh.antennapod.adapter.QueueListAdapter;
import de.danoeh.antennapod.core.asynctask.DownloadObserver;
-import de.danoeh.antennapod.dialog.FeedItemDialog;
import de.danoeh.antennapod.core.feed.EventDistributor;
+import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.service.download.DownloadService;
import de.danoeh.antennapod.core.service.download.Downloader;
import de.danoeh.antennapod.core.storage.DBReader;
+import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.core.storage.DBWriter;
-import de.danoeh.antennapod.core.util.QueueAccess;
+import de.danoeh.antennapod.core.storage.DownloadRequester;
+import de.danoeh.antennapod.core.util.QueueSorter;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
@@ -59,14 +63,12 @@ public class QueueFragment extends Fragment {
private boolean itemsLoaded = false;
private boolean viewsCreated = false;
+ private boolean isUpdatingFeeds = false;
private AtomicReference<Activity> activity = new AtomicReference<Activity>();
private DownloadObserver downloadObserver = null;
- private FeedItemDialog feedItemDialog;
- private FeedItemDialog.FeedItemDialogSavedInstance feedItemDialogSavedInstance;
-
/**
* Download observer updates won't result in an upate of the list adapter if this is true.
*/
@@ -122,10 +124,6 @@ public class QueueFragment extends Fragment {
if (downloadObserver != null) {
downloadObserver.onPause();
}
- if (feedItemDialog != null) {
- feedItemDialogSavedInstance = feedItemDialog.save();
- }
- feedItemDialog = null;
}
@Override
@@ -134,10 +132,19 @@ public class QueueFragment extends Fragment {
resetViewState();
}
+ private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = new MenuItemUtils.UpdateRefreshMenuItemChecker() {
+ @Override
+ public boolean isRefreshing() {
+ return DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds();
+ }
+ };
+
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
+ inflater.inflate(R.menu.queue, menu);
+
final SearchView sv = new SearchView(getActivity());
MenuItemUtils.addSearchItem(menu, sv);
sv.setQueryHint(getString(R.string.search_hint));
@@ -154,7 +161,45 @@ public class QueueFragment extends Fragment {
return false;
}
});
+ isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (!super.onOptionsItemSelected(item)) {
+ switch (item.getItemId()) {
+ case R.id.refresh_item:
+ List<Feed> feeds = ((MainActivity) getActivity()).getFeeds();
+ if (feeds != null) {
+ DBTasks.refreshAllFeeds(getActivity(), feeds);
+ }
+ return true;
+ case R.id.queue_sort_alpha_asc:
+ QueueSorter.sort(getActivity(), QueueSorter.Rule.ALPHA_ASC, true);
+ return true;
+ case R.id.queue_sort_alpha_desc:
+ QueueSorter.sort(getActivity(), QueueSorter.Rule.ALPHA_DESC, true);
+ return true;
+ case R.id.queue_sort_date_asc:
+ QueueSorter.sort(getActivity(), QueueSorter.Rule.DATE_ASC, true);
+ return true;
+ case R.id.queue_sort_date_desc:
+ QueueSorter.sort(getActivity(), QueueSorter.Rule.DATE_DESC, true);
+ return true;
+ case R.id.queue_sort_duration_asc:
+ QueueSorter.sort(getActivity(), QueueSorter.Rule.DURATION_ASC, true);
+ return true;
+ case R.id.queue_sort_duration_desc:
+ QueueSorter.sort(getActivity(), QueueSorter.Rule.DURATION_DESC, true);
+ return true;
+ default:
+ return false;
+ }
+ } else {
+ return true;
}
+
}
@Override
@@ -215,8 +260,7 @@ public class QueueFragment extends Fragment {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FeedItem item = (FeedItem) listAdapter.getItem(position - listView.getHeaderViewsCount());
if (item != null) {
- feedItemDialog = FeedItemDialog.newInstance(activity.get(), item, QueueAccess.ItemListAccess(queue));
- feedItemDialog.show();
+ ((MainActivity) getActivity()).loadChildFragment(ItemFragment.newInstance(item.getId()));
}
}
});
@@ -268,11 +312,10 @@ public class QueueFragment extends Fragment {
downloadObserver.onResume();
}
listAdapter.notifyDataSetChanged();
- if (feedItemDialog != null) {
- feedItemDialog.updateContent(QueueAccess.ItemListAccess(queue), queue);
- } else if (feedItemDialogSavedInstance != null) {
- feedItemDialog = FeedItemDialog.newInstance(activity.get(), feedItemDialogSavedInstance);
- }
+
+ // we need to refresh the options menu because it sometimes
+ // needs data that may have just been loaded.
+ getActivity().supportInvalidateOptionsMenu();
}
private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() {
@@ -281,9 +324,6 @@ public class QueueFragment extends Fragment {
if (listAdapter != null && !blockDownloadObserverUpdate) {
listAdapter.notifyDataSetChanged();
}
- if (feedItemDialog != null && feedItemDialog.isShowing()) {
- feedItemDialog.updateMenuAppearance();
- }
}
@Override
@@ -325,6 +365,9 @@ public class QueueFragment extends Fragment {
public void update(EventDistributor eventDistributor, Integer arg) {
if ((arg & EVENTS) != 0) {
startItemLoader();
+ if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
+ getActivity().supportInvalidateOptionsMenu();
+ }
}
}
};
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
index 0f98a2780..cf96bb094 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
@@ -12,19 +12,23 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
+
+import java.util.List;
+
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.SearchlistAdapter;
-import de.danoeh.antennapod.dialog.FeedItemDialog;
-import de.danoeh.antennapod.core.feed.*;
+import de.danoeh.antennapod.core.feed.EventDistributor;
+import de.danoeh.antennapod.core.feed.Feed;
+import de.danoeh.antennapod.core.feed.FeedComponent;
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.SearchResult;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.FeedSearcher;
import de.danoeh.antennapod.core.util.QueueAccess;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
-import java.util.List;
-
/**
* Performs a search operation on all feeds or one specific feed and displays the search result.
*/
@@ -42,9 +46,6 @@ public class SearchFragment extends ListFragment {
private QueueAccess queue;
- private FeedItemDialog feedItemDialog;
- private FeedItemDialog.FeedItemDialogSavedInstance feedItemDialogSavedInstance;
-
/**
* Create a new SearchFragment that searches all feeds.
*/
@@ -99,10 +100,6 @@ public class SearchFragment extends ListFragment {
super.onDestroyView();
searchAdapter = null;
viewCreated = false;
- if (feedItemDialog != null) {
- feedItemDialogSavedInstance = feedItemDialog.save();
- }
- feedItemDialog = null;
}
@Override
@@ -128,11 +125,11 @@ public class SearchFragment extends ListFragment {
SearchResult result = (SearchResult) l.getAdapter().getItem(position);
FeedComponent comp = result.getComponent();
if (comp.getClass() == Feed.class) {
- ((MainActivity)getActivity()).loadFeedFragment(comp.getId());
+ ((MainActivity) getActivity()).loadFeedFragment(comp.getId());
} else {
if (comp.getClass() == FeedItem.class) {
- feedItemDialog = FeedItemDialog.newInstance(getActivity(), (FeedItem) comp, queue);
- feedItemDialog.show();
+ FeedItem item = (FeedItem) comp;
+ ((MainActivity) getActivity()).loadChildFragment(ItemFragment.newInstance(item.getId()));
}
}
}
@@ -167,9 +164,6 @@ public class SearchFragment extends ListFragment {
private final EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
- if ((arg & (EventDistributor.DOWNLOAD_QUEUED)) != 0 && feedItemDialog != null) {
- feedItemDialog.updateMenuAppearance();
- }
if ((arg & (EventDistributor.UNREAD_ITEMS_UPDATE
| EventDistributor.DOWNLOAD_HANDLED
| EventDistributor.QUEUE_UPDATE)) != 0) {
@@ -185,18 +179,6 @@ public class SearchFragment extends ListFragment {
}
searchAdapter.notifyDataSetChanged();
setListShown(true);
- if (feedItemDialog != null && feedItemDialog.isShowing()) {
- feedItemDialog.setQueue(queue);
- for (SearchResult result : searchResults) {
- FeedComponent comp = result.getComponent();
- if (comp.getClass() == FeedItem.class && ((FeedItem) comp).getId() == feedItemDialog.getItem().getId()) {
- feedItemDialog.setItem((FeedItem) comp);
- }
- }
- feedItemDialog.updateMenuAppearance();
- } else if (feedItemDialogSavedInstance != null) {
- feedItemDialog = FeedItemDialog.newInstance(getActivity(), feedItemDialogSavedInstance);
- }
}
private final SearchlistAdapter.ItemAccess itemAccess = new SearchlistAdapter.ItemAccess() {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java
index ec8f69368..45b2403c8 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java
@@ -1,85 +1,32 @@
package de.danoeh.antennapod.fragment.gpodnet;
-import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
-import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
-import android.support.v7.app.ActionBar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+
import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.MainActivity;
/**
* Main navigation hub for gpodder.net podcast directory
*/
public class GpodnetMainFragment extends Fragment {
- private ViewPager pager;
- private MainActivity activity;
-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View root = inflater.inflate(R.layout.pager_fragment, container, false);
- pager = (ViewPager) root.findViewById(R.id.pager);
+ ViewPager pager = (ViewPager) root.findViewById(R.id.pager);
GpodnetPagerAdapter pagerAdapter = new GpodnetPagerAdapter(getChildFragmentManager(), getResources());
pager.setAdapter(pagerAdapter);
- final ActionBar actionBar = activity.getMainActivtyActionBar();
- actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
- ActionBar.TabListener tabListener = new ActionBar.TabListener() {
- @Override
- public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
- pager.setCurrentItem(tab.getPosition());
- }
-
- @Override
- public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-
- }
-
- @Override
- public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-
- }
- };
- actionBar.removeAllTabs();
- actionBar.addTab(actionBar.newTab()
- .setText(R.string.gpodnet_taglist_header)
- .setTabListener(tabListener));
- actionBar.addTab(actionBar.newTab()
- .setText(R.string.gpodnet_toplist_header)
- .setTabListener(tabListener));
- actionBar.setTitle(R.string.gpodnet_main_label);
-
- pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
- @Override
- public void onPageSelected(int position) {
- super.onPageSelected(position);
- actionBar.setSelectedNavigationItem(position);
- }
- });
return root;
}
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- activity.getMainActivtyActionBar().removeAllTabs();
- activity.getMainActivtyActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- this.activity = (MainActivity) activity;
- }
-
public class GpodnetPagerAdapter extends FragmentPagerAdapter {