Search in sources :

Example 11 with FeedMedia

use of de.danoeh.antennapod.core.feed.FeedMedia in project AntennaPod by AntennaPod.

the class MediaplayerInfoActivity method onContextItemSelected.

@Override
public boolean onContextItemSelected(MenuItem item) {
    final int position = mPosition;
    // reset
    mPosition = -1;
    if (position < 0) {
        return false;
    }
    Feed feed = navDrawerData.feeds.get(position - navAdapter.getSubscriptionOffset());
    switch(item.getItemId()) {
        case R.id.mark_all_seen_item:
            DBWriter.markFeedSeen(feed.getId());
            return true;
        case R.id.mark_all_read_item:
            DBWriter.markFeedRead(feed.getId());
            return true;
        case R.id.rename_item:
            new RenameFeedDialog(this, feed).show();
            return true;
        case R.id.remove_item:
            final FeedRemover remover = new FeedRemover(this, feed) {

                @Override
                protected void onPostExecute(Void result) {
                    super.onPostExecute(result);
                }
            };
            ConfirmationDialog conDialog = new ConfirmationDialog(this, R.string.remove_feed_label, R.string.feed_delete_confirmation_msg) {

                @Override
                public void onConfirmButtonPressed(DialogInterface dialog) {
                    dialog.dismiss();
                    if (controller != null) {
                        Playable playable = controller.getMedia();
                        if (playable != null && playable instanceof FeedMedia) {
                            FeedMedia media = (FeedMedia) playable;
                            if (media.getItem().getFeed().getId() == feed.getId()) {
                                Log.d(TAG, "Currently playing episode is about to be deleted, skipping");
                                remover.skipOnCompletion = true;
                                if (controller.getStatus() == PlayerStatus.PLAYING) {
                                    sendBroadcast(new Intent(PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE));
                                }
                            }
                        }
                    }
                    remover.executeAsync();
                }
            };
            conDialog.createNewDialog().show();
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}
Also used : FeedRemover(de.danoeh.antennapod.core.asynctask.FeedRemover) DialogInterface(android.content.DialogInterface) Playable(de.danoeh.antennapod.core.util.playback.Playable) FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia) RenameFeedDialog(de.danoeh.antennapod.dialog.RenameFeedDialog) Intent(android.content.Intent) Feed(de.danoeh.antennapod.core.feed.Feed) ConfirmationDialog(de.danoeh.antennapod.core.dialog.ConfirmationDialog)

Example 12 with FeedMedia

use of de.danoeh.antennapod.core.feed.FeedMedia in project AntennaPod by AntennaPod.

the class ActionButtonUtils method configureActionButton.

/**
     * Sets the displayed bitmap and content description of the given
     * action button so that it matches the state of the FeedItem.
     */
@SuppressWarnings("ResourceType")
public void configureActionButton(ImageButton butSecondary, FeedItem item, boolean isInQueue) {
    Validate.isTrue(butSecondary != null && item != null, "butSecondary or item was null");
    final FeedMedia media = item.getMedia();
    if (media != null) {
        final boolean isDownloadingMedia = DownloadRequester.getInstance().isDownloadingFile(media);
        if (!media.isDownloaded()) {
            if (isDownloadingMedia) {
                // item is being downloaded
                butSecondary.setVisibility(View.VISIBLE);
                butSecondary.setImageDrawable(drawables.getDrawable(1));
                butSecondary.setContentDescription(context.getString(labels[1]));
            } else {
                // item is not downloaded and not being downloaded
                if (DefaultActionButtonCallback.userAllowedMobileDownloads() || !DefaultActionButtonCallback.userChoseAddToQueue() || isInQueue) {
                    butSecondary.setVisibility(View.VISIBLE);
                    butSecondary.setImageDrawable(drawables.getDrawable(2));
                    butSecondary.setContentDescription(context.getString(labels[2]));
                } else {
                    // mobile download not allowed yet, item is not in queue and user chose add to queue
                    butSecondary.setVisibility(View.VISIBLE);
                    butSecondary.setImageDrawable(drawables.getDrawable(5));
                    butSecondary.setContentDescription(context.getString(labels[4]));
                }
            }
        } else {
            // item is downloaded
            butSecondary.setVisibility(View.VISIBLE);
            if (media.isCurrentlyPlaying()) {
                butSecondary.setImageDrawable(drawables.getDrawable(3));
            } else {
                butSecondary.setImageDrawable(drawables.getDrawable(0));
            }
            butSecondary.setContentDescription(context.getString(labels[0]));
        }
    } else {
        if (item.isPlayed()) {
            butSecondary.setVisibility(View.INVISIBLE);
        } else {
            butSecondary.setVisibility(View.VISIBLE);
            butSecondary.setImageDrawable(drawables.getDrawable(4));
            butSecondary.setContentDescription(context.getString(labels[3]));
        }
    }
}
Also used : FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia)

Example 13 with FeedMedia

use of de.danoeh.antennapod.core.feed.FeedMedia in project AntennaPod by AntennaPod.

the class AdapterUtils method updateEpisodePlaybackProgress.

/**
     * Updates the contents of the TextView that shows the current playback position and the ProgressBar.
     */
static void updateEpisodePlaybackProgress(FeedItem item, TextView txtvPos, ProgressBar episodeProgress) {
    FeedMedia media = item.getMedia();
    episodeProgress.setVisibility(View.GONE);
    if (media == null) {
        txtvPos.setVisibility(View.GONE);
        return;
    } else {
        txtvPos.setVisibility(View.VISIBLE);
    }
    FeedItem.State state = item.getState();
    if (state == FeedItem.State.PLAYING || state == FeedItem.State.IN_PROGRESS) {
        if (media.getDuration() > 0) {
            episodeProgress.setVisibility(View.VISIBLE);
            episodeProgress.setProgress((int) (((double) media.getPosition()) / media.getDuration() * 100));
            txtvPos.setText(Converter.getDurationStringLong(media.getDuration() - media.getPosition()));
        }
    } else if (!media.isDownloaded()) {
        if (media.getSize() > 0) {
            txtvPos.setText(Converter.byteToString(media.getSize()));
        } else if (NetworkUtils.isDownloadAllowed() && !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("");
                }
            }, error -> {
                txtvPos.setText("");
                Log.e(TAG, Log.getStackTraceString(error));
            });
        } else {
            txtvPos.setText("");
        }
    } else {
        txtvPos.setText(Converter.getDurationStringLong(media.getDuration()));
    }
}
Also used : FeedItem(de.danoeh.antennapod.core.feed.FeedItem) FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia)

Example 14 with FeedMedia

use of de.danoeh.antennapod.core.feed.FeedMedia in project AntennaPod by AntennaPod.

the class AllEpisodesRecycleAdapter method onBindViewHolder.

@Override
public void onBindViewHolder(final Holder holder, int position) {
    final FeedItem item = itemAccess.getItem(position);
    if (item == null)
        return;
    holder.itemView.setOnLongClickListener(v -> {
        this.position = position;
        return false;
    });
    holder.item = item;
    holder.position = position;
    holder.placeholder.setVisibility(View.VISIBLE);
    holder.placeholder.setText(item.getFeed().getTitle());
    holder.title.setText(item.getTitle());
    String pubDateStr = DateUtils.formatAbbrev(mainActivityRef.get(), item.getPubDate());
    holder.pubDate.setText(pubDateStr);
    if (showOnlyNewEpisodes || !item.isNew()) {
        holder.statusUnread.setVisibility(View.INVISIBLE);
    } else {
        holder.statusUnread.setVisibility(View.VISIBLE);
    }
    if (item.isPlayed()) {
        ViewHelper.setAlpha(holder.content, 0.5f);
    } else {
        ViewHelper.setAlpha(holder.content, 1.0f);
    }
    FeedMedia media = item.getMedia();
    if (media != null) {
        final boolean isDownloadingMedia = DownloadRequester.getInstance().isDownloadingFile(media);
        if (media.getDuration() > 0) {
            holder.txtvDuration.setText(Converter.getDurationStringLong(media.getDuration()));
        } else if (media.getSize() > 0) {
            holder.txtvDuration.setText(Converter.byteToString(media.getSize()));
        } else if (NetworkUtils.isDownloadAllowed() && !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("");
                }
            }, error -> {
                holder.txtvDuration.setText("");
                Log.e(TAG, Log.getStackTraceString(error));
            });
        } else {
            holder.txtvDuration.setText("");
        }
        FeedItem.State state = item.getState();
        if (isDownloadingMedia) {
            holder.progress.setVisibility(View.VISIBLE);
            // item is being downloaded
            holder.progress.setProgress(itemAccess.getItemDownloadProgressPercent(item));
        } else if (state == FeedItem.State.PLAYING || state == FeedItem.State.IN_PROGRESS) {
            if (media.getDuration() > 0) {
                int progress = (int) (100.0 * media.getPosition() / media.getDuration());
                holder.progress.setProgress(progress);
                holder.progress.setVisibility(View.VISIBLE);
            }
        } else {
            holder.progress.setVisibility(View.GONE);
        }
        if (media.isCurrentlyPlaying()) {
            holder.container.setBackgroundColor(playingBackGroundColor);
        } else {
            holder.container.setBackgroundColor(normalBackGroundColor);
        }
    } else {
        holder.progress.setVisibility(View.GONE);
        holder.txtvDuration.setVisibility(View.GONE);
    }
    boolean isInQueue = itemAccess.isInQueue(item);
    if (isInQueue) {
        holder.queueStatus.setVisibility(View.VISIBLE);
    } else {
        holder.queueStatus.setVisibility(View.INVISIBLE);
    }
    actionButtonUtils.configureActionButton(holder.butSecondary, item, isInQueue);
    holder.butSecondary.setFocusable(false);
    holder.butSecondary.setTag(item);
    holder.butSecondary.setOnClickListener(secondaryActionListener);
    Glide.with(mainActivityRef.get()).load(item.getImageLocation()).diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY).fitCenter().dontAnimate().into(new CoverTarget(item.getFeed().getImageLocation(), holder.placeholder, holder.cover, mainActivityRef.get()));
}
Also used : FeedItem(de.danoeh.antennapod.core.feed.FeedItem) FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia)

Example 15 with FeedMedia

use of de.danoeh.antennapod.core.feed.FeedMedia in project AntennaPod by AntennaPod.

the class AtomGenerator method writeFeed.

@Override
public void writeFeed(Feed feed, OutputStream outputStream, String encoding, long flags) throws IOException {
    if (feed == null)
        throw new IllegalArgumentException("feed = null");
    if (outputStream == null)
        throw new IllegalArgumentException("outputStream = null");
    if (encoding == null)
        throw new IllegalArgumentException("encoding = null");
    XmlSerializer xml = Xml.newSerializer();
    xml.setOutput(outputStream, encoding);
    xml.startDocument(encoding, null);
    xml.startTag(null, "feed");
    xml.attribute(null, "xmlns", NS_ATOM);
    // Write Feed data
    if (feed.getIdentifyingValue() != null) {
        xml.startTag(null, "id");
        xml.text(feed.getIdentifyingValue());
        xml.endTag(null, "id");
    }
    if (feed.getTitle() != null) {
        xml.startTag(null, "title");
        xml.text(feed.getTitle());
        xml.endTag(null, "title");
    }
    if (feed.getLink() != null) {
        xml.startTag(null, "link");
        xml.attribute(null, "rel", "alternate");
        xml.attribute(null, "href", feed.getLink());
        xml.endTag(null, "link");
    }
    if (feed.getDescription() != null) {
        xml.startTag(null, "subtitle");
        xml.text(feed.getDescription());
        xml.endTag(null, "subtitle");
    }
    if (feed.getPaymentLink() != null) {
        GeneratorUtil.addPaymentLink(xml, feed.getPaymentLink(), false);
    }
    // Write FeedItem data
    if (feed.getItems() != null) {
        for (FeedItem item : feed.getItems()) {
            xml.startTag(null, "entry");
            if (item.getIdentifyingValue() != null) {
                xml.startTag(null, "id");
                xml.text(item.getIdentifyingValue());
                xml.endTag(null, "id");
            }
            if (item.getTitle() != null) {
                xml.startTag(null, "title");
                xml.text(item.getTitle());
                xml.endTag(null, "title");
            }
            if (item.getLink() != null) {
                xml.startTag(null, "link");
                xml.attribute(null, "rel", "alternate");
                xml.attribute(null, "href", item.getLink());
                xml.endTag(null, "link");
            }
            if (item.getPubDate() != null) {
                xml.startTag(null, "published");
                if ((flags & FEATURE_USE_RFC3339LOCAL) != 0) {
                    xml.text(DateUtils.formatRFC3339Local(item.getPubDate()));
                } else {
                    xml.text(DateUtils.formatRFC3339UTC(item.getPubDate()));
                }
                xml.endTag(null, "published");
            }
            if (item.getDescription() != null) {
                xml.startTag(null, "content");
                xml.text(item.getDescription());
                xml.endTag(null, "content");
            }
            if (item.getMedia() != null) {
                FeedMedia media = item.getMedia();
                xml.startTag(null, "link");
                xml.attribute(null, "rel", "enclosure");
                xml.attribute(null, "href", media.getDownload_url());
                xml.attribute(null, "type", media.getMime_type());
                xml.attribute(null, "length", String.valueOf(media.getSize()));
                xml.endTag(null, "link");
            }
            if (item.getPaymentLink() != null) {
                GeneratorUtil.addPaymentLink(xml, item.getPaymentLink(), false);
            }
            xml.endTag(null, "entry");
        }
    }
    xml.endTag(null, "feed");
    xml.endDocument();
}
Also used : FeedItem(de.danoeh.antennapod.core.feed.FeedItem) FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia) XmlSerializer(org.xmlpull.v1.XmlSerializer)

Aggregations

FeedMedia (de.danoeh.antennapod.core.feed.FeedMedia)53 FeedItem (de.danoeh.antennapod.core.feed.FeedItem)39 Feed (de.danoeh.antennapod.core.feed.Feed)20 Date (java.util.Date)19 PodDBAdapter (de.danoeh.antennapod.core.storage.PodDBAdapter)16 ArrayList (java.util.ArrayList)13 FeedImage (de.danoeh.antennapod.core.feed.FeedImage)10 File (java.io.File)9 Intent (android.content.Intent)7 Playable (de.danoeh.antennapod.core.util.playback.Playable)7 Cursor (android.database.Cursor)6 SharedPreferences (android.content.SharedPreferences)4 TypedArray (android.content.res.TypedArray)3 Uri (android.net.Uri)3 View (android.view.View)3 Chapter (de.danoeh.antennapod.core.feed.Chapter)3 GpodnetEpisodeAction (de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction)3 Context (android.content.Context)2 ArrayMap (android.support.v4.util.ArrayMap)2 FlakyTest (android.test.FlakyTest)2