diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod')
10 files changed, 103 insertions, 34 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java index e7283d860..026e3b087 100644 --- a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java +++ b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java @@ -44,8 +44,6 @@ public class PodcastApp extends Application { EventDistributor.getInstance(); SPAUtil.sendSPAppsQueryFeedsIntent(this); - - // startService(new Intent(this, FeedMediaSizeService.class)); } public static float getLogicalDensity() { diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java index 811628ebf..035ab2f22 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java @@ -7,6 +7,7 @@ import android.webkit.WebViewClient; import android.widget.LinearLayout; import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.preferences.UserPreferences; /** * Displays the 'about' screen @@ -18,6 +19,7 @@ public class AboutActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { + setTheme(UserPreferences.getTheme()); super.onCreate(savedInstanceState); getSupportActionBar().hide(); setContentView(R.layout.about); diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 294acd427..b975d482a 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -75,6 +75,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc private DrawerLayout drawerLayout; private NavListAdapter navAdapter; private ListView navList; + private AdapterView.AdapterContextMenuInfo lastMenuInfo = null; private View navDrawer; private ActionBarDrawerToggle drawerToggle; @@ -663,11 +664,19 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc Feed feed = navDrawerData.feeds.get(position - navAdapter.getSubscriptionOffset()); menu.setHeaderTitle(feed.getTitle()); // episodes are not loaded, so we cannot check if the podcast has new or unplayed ones! + + // we may need to reference this elsewhere... + lastMenuInfo = (AdapterView.AdapterContextMenuInfo) menuInfo; } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); + + if(menuInfo == null) { + menuInfo = lastMenuInfo; + } + if(menuInfo.targetView.getParent() instanceof ListView == false || ((ListView)menuInfo.targetView.getParent()).getId() != R.id.nav_list) { return false; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index 7eee1558b..e10e8041e 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -96,6 +96,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity private View navDrawer; private ListView navList; private NavListAdapter navAdapter; + private AdapterView.AdapterContextMenuInfo lastMenuInfo = null; private ActionBarDrawerToggle drawerToggle; @@ -505,11 +506,19 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity Feed feed = navDrawerData.feeds.get(position - navAdapter.getSubscriptionOffset()); menu.setHeaderTitle(feed.getTitle()); // episodes are not loaded, so we cannot check if the podcast has new or unplayed ones! + + // we may need to reference this elsewhere... + lastMenuInfo = (AdapterView.AdapterContextMenuInfo) menuInfo; } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); + + if(menuInfo == null) { + menuInfo = lastMenuInfo; + } + if(menuInfo.targetView.getParent() instanceof ListView == false || ((ListView)menuInfo.targetView.getParent()).getId() != R.id.nav_list) { return false; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java index b83e9bc15..40a0d1801 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -255,10 +255,20 @@ public abstract class MediaplayerActivity extends ActionBarActivity (media instanceof FeedMedia) && ((FeedMedia) media).getItem().getFlattrStatus().flattrable() ); - menu.findItem(R.id.share_link_item).setVisible( - media != null && media.getWebsiteLink() != null); - menu.findItem(R.id.visit_website_item).setVisible( - media != null && media.getWebsiteLink() != null); + + boolean hasWebsiteLink = media != null && media.getWebsiteLink() != null; + menu.findItem(R.id.visit_website_item).setVisible(hasWebsiteLink); + + boolean isItemAndHasLink = media != null && (media instanceof FeedMedia) && ((FeedMedia) media).getItem().getLink() != null; + menu.findItem(R.id.share_link_item).setVisible(isItemAndHasLink); + menu.findItem(R.id.share_link_with_position_item).setVisible(isItemAndHasLink); + + boolean isItemHasDownloadLink = media != null && (media instanceof FeedMedia) && ((FeedMedia) media).getDownload_url() != null; + menu.findItem(R.id.share_download_url_item).setVisible(isItemHasDownloadLink); + menu.findItem(R.id.share_download_url_with_position_item).setVisible(isItemHasDownloadLink); + + menu.findItem(R.id.share_item).setVisible(hasWebsiteLink || isItemAndHasLink || isItemHasDownloadLink); + menu.findItem(R.id.skip_episode_item).setVisible(media != null); boolean sleepTimerSet = controller.sleepTimerActive(); boolean sleepTimerNotSet = controller.sleepTimerNotActive(); @@ -278,7 +288,6 @@ public abstract class MediaplayerActivity extends ActionBarActivity startActivity(intent); return true; } else if (media != null) { - FeedItem feedItem = ((FeedMedia) media).getItem(); switch (item.getItemId()) { case R.id.disable_sleeptimer_item: if (controller.serviceAvailable()) { @@ -334,20 +343,28 @@ public abstract class MediaplayerActivity extends ActionBarActivity break; case R.id.support_item: if (media instanceof FeedMedia) { - DBTasks.flattrItemIfLoggedIn(this, feedItem); + DBTasks.flattrItemIfLoggedIn(this, ((FeedMedia) media).getItem()); } break; case R.id.share_link_item: - ShareUtils.shareFeedItemLink(this, feedItem); + if (media instanceof FeedMedia) { + ShareUtils.shareFeedItemLink(this, ((FeedMedia) media).getItem()); + } break; case R.id.share_download_url_item: - ShareUtils.shareFeedItemDownloadLink(this, feedItem); + if (media instanceof FeedMedia) { + ShareUtils.shareFeedItemDownloadLink(this, ((FeedMedia) media).getItem()); + } break; case R.id.share_link_with_position_item: - ShareUtils.shareFeedItemLink(this, feedItem, true); + if (media instanceof FeedMedia) { + ShareUtils.shareFeedItemLink(this, ((FeedMedia) media).getItem(), true); + } break; case R.id.share_download_url_with_position_item: - ShareUtils.shareFeedItemDownloadLink(this, feedItem, true); + if (media instanceof FeedMedia) { + ShareUtils.shareFeedItemDownloadLink(this, ((FeedMedia) media).getItem(), true); + } break; case R.id.skip_episode_item: sendBroadcast(new Intent( diff --git a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java index 94970d833..133436b6f 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java @@ -45,9 +45,12 @@ public class PreferenceActivity extends ActionBarActivity { @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override protected void onCreate(Bundle savedInstanceState) { + // This must be the FIRST thing we do, otherwise other code may not have the + // reference it needs + instance = this; + setTheme(UserPreferences.getTheme()); super.onCreate(savedInstanceState); - instance = this; ActionBar ab = getSupportActionBar(); if (ab != null) { diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java index d3ee08546..854358285 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java @@ -1,19 +1,23 @@ package de.danoeh.antennapod.adapter; -import android.content.res.Resources; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; +import com.joanzapata.android.iconify.Iconify; + import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.NetworkUtils; /** * Utility methods for adapters */ public class AdapterUtils { + private static final String TAG = AdapterUtils.class.getSimpleName(); + private AdapterUtils() { } @@ -21,7 +25,7 @@ public class AdapterUtils { /** * Updates the contents of the TextView that shows the current playback position and the ProgressBar. */ - public static void updateEpisodePlaybackProgress(FeedItem item, Resources res, TextView txtvPos, ProgressBar episodeProgress) { + public static void updateEpisodePlaybackProgress(FeedItem item, TextView txtvPos, ProgressBar episodeProgress) { FeedMedia media = item.getMedia(); episodeProgress.setVisibility(View.GONE); if (media == null) { @@ -42,8 +46,19 @@ public class AdapterUtils { - media.getPosition())); } } else if (!media.isDownloaded()) { - if(media.getSize() > 0) { + if (media.getSize() > 0) { txtvPos.setText(Converter.byteToString(media.getSize())); + } else if(false == media.checkedOnSizeButUnknown()) { + txtvPos.setText("{fa-spinner}"); + Iconify.addIcons(txtvPos); + NetworkUtils.getFeedMediaSizeObservable(media) + .subscribe(size -> { + if (size > 0) { + txtvPos.setText(Converter.byteToString(size)); + } else { + txtvPos.setText(""); + } + }); } else { txtvPos.setText(""); } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java index 4b6ee8f91..c83b21c49 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java @@ -14,10 +14,10 @@ import android.widget.ProgressBar; import android.widget.TextView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.GlideDrawableImageViewTarget; +import com.joanzapata.android.iconify.Iconify; import java.lang.ref.WeakReference; @@ -27,12 +27,15 @@ import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.NetworkUtils; /** * List adapter for the list of new episodes */ public class AllEpisodesListAdapter extends BaseAdapter { + private static final String TAG = AllEpisodesListAdapter.class.getSimpleName(); + private final Context context; private final ItemAccess itemAccess; private final ActionButtonCallback actionButtonCallback; @@ -117,6 +120,17 @@ public class AllEpisodesListAdapter extends BaseAdapter { holder.txtvDuration.setText(Converter.getDurationStringLong(media.getDuration())); } else if (media.getSize() > 0) { holder.txtvDuration.setText(Converter.byteToString(media.getSize())); + } else if(false == media.checkedOnSizeButUnknown()) { + holder.txtvDuration.setText("{fa-spinner}"); + Iconify.addIcons(holder.txtvDuration); + NetworkUtils.getFeedMediaSizeObservable(media) + .subscribe(size -> { + if (size > 0) { + holder.txtvDuration.setText(Converter.byteToString(size)); + } else { + holder.txtvDuration.setText(""); + } + }); } else { holder.txtvDuration.setText(""); } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index 56e2bb1bd..507d1adbc 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -91,7 +91,7 @@ public class FeedItemlistAdapter extends BaseAdapter { holder.inPlaylist = (ImageView) convertView .findViewById(R.id.imgvInPlaylist); holder.type = (ImageView) convertView.findViewById(R.id.imgvType); - holder.statusUnread = (View) convertView + holder.statusUnread = convertView .findViewById(R.id.statusUnread); holder.episodeProgress = (ProgressBar) convertView .findViewById(R.id.pbar_episode_progress); @@ -100,6 +100,7 @@ public class FeedItemlistAdapter extends BaseAdapter { } else { holder = (Holder) convertView.getTag(); } + if (!(getItemViewType(position) == Adapter.IGNORE_ITEM_VIEW_TYPE)) { convertView.setVisibility(View.VISIBLE); if (position == selectedItemIndex) { @@ -139,18 +140,17 @@ public class FeedItemlistAdapter extends BaseAdapter { holder.lenSize.setVisibility(View.INVISIBLE); } else { - AdapterUtils.updateEpisodePlaybackProgress(item, context.getResources(), holder.lenSize, holder.episodeProgress); + AdapterUtils.updateEpisodePlaybackProgress(item, holder.lenSize, holder.episodeProgress); - if (((ItemAccess) itemAccess).isInQueue(item)) { + if (itemAccess.isInQueue(item)) { holder.inPlaylist.setVisibility(View.VISIBLE); } else { holder.inPlaylist.setVisibility(View.INVISIBLE); } - if (DownloadRequester.getInstance().isDownloadingFile( - item.getMedia())) { + if (DownloadRequester.getInstance().isDownloadingFile(item.getMedia())) { holder.episodeProgress.setVisibility(View.VISIBLE); - holder.episodeProgress.setProgress(((ItemAccess) itemAccess).getItemDownloadProgressPercent(item)); + holder.episodeProgress.setProgress(itemAccess.getItemDownloadProgressPercent(item)); } else { if(media.getPosition() == 0) { holder.episodeProgress.setVisibility(View.GONE); @@ -206,15 +206,6 @@ public class FeedItemlistAdapter extends BaseAdapter { ProgressBar episodeProgress; } - public int getSelectedItemIndex() { - return selectedItemIndex; - } - - public void setSelectedItemIndex(int selectedItemIndex) { - this.selectedItemIndex = selectedItemIndex; - notifyDataSetChanged(); - } - public interface ItemAccess { boolean isInQueue(FeedItem item); diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java index 60c125fda..b1dfe2ad2 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java @@ -4,7 +4,6 @@ import android.content.Context; import android.graphics.drawable.Drawable; import android.net.Uri; import android.text.format.DateUtils; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,10 +14,10 @@ import android.widget.ProgressBar; import android.widget.TextView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.GlideDrawableImageViewTarget; +import com.joanzapata.android.iconify.Iconify; import java.lang.ref.WeakReference; @@ -29,6 +28,7 @@ import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.NetworkUtils; /** * List adapter for the queue. @@ -143,6 +143,17 @@ public class QueueListAdapter extends BaseAdapter { } else { if(media.getSize() > 0) { holder.progressLeft.setText(Converter.byteToString(media.getSize())); + } else if(false == media.checkedOnSizeButUnknown()) { + holder.progressLeft.setText("{fa-spinner}"); + Iconify.addIcons(holder.progressLeft); + NetworkUtils.getFeedMediaSizeObservable(media) + .subscribe(size -> { + if (size > 0) { + holder.progressLeft.setText(Converter.byteToString(size)); + } else { + holder.progressLeft.setText(""); + } + }); } else { holder.progressLeft.setText(""); } |