Search in sources :

Example 36 with FeedMedia

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

the class FeedHandlerTest method feedValid.

private void feedValid(Feed feed, Feed parsedFeed, String feedType) {
    assertEquals(feed.getTitle(), parsedFeed.getTitle());
    if (feedType.equals(Feed.TYPE_ATOM1)) {
        assertEquals(feed.getFeedIdentifier(), parsedFeed.getFeedIdentifier());
    } else {
        assertEquals(feed.getLanguage(), parsedFeed.getLanguage());
    }
    assertEquals(feed.getLink(), parsedFeed.getLink());
    assertEquals(feed.getDescription(), parsedFeed.getDescription());
    assertEquals(feed.getPaymentLink(), parsedFeed.getPaymentLink());
    if (feed.getImage() != null) {
        FeedImage image = feed.getImage();
        FeedImage parsedImage = parsedFeed.getImage();
        assertNotNull(parsedImage);
        assertEquals(image.getTitle(), parsedImage.getTitle());
        assertEquals(image.getDownload_url(), parsedImage.getDownload_url());
    }
    if (feed.getItems() != null) {
        assertNotNull(parsedFeed.getItems());
        assertEquals(feed.getItems().size(), parsedFeed.getItems().size());
        for (int i = 0; i < feed.getItems().size(); i++) {
            FeedItem item = feed.getItems().get(i);
            FeedItem parsedItem = parsedFeed.getItems().get(i);
            if (item.getItemIdentifier() != null)
                assertEquals(item.getItemIdentifier(), parsedItem.getItemIdentifier());
            assertEquals(item.getTitle(), parsedItem.getTitle());
            assertEquals(item.getDescription(), parsedItem.getDescription());
            assertEquals(item.getContentEncoded(), parsedItem.getContentEncoded());
            assertEquals(item.getLink(), parsedItem.getLink());
            assertEquals(item.getPubDate().getTime(), parsedItem.getPubDate().getTime());
            assertEquals(item.getPaymentLink(), parsedItem.getPaymentLink());
            if (item.hasMedia()) {
                assertTrue(parsedItem.hasMedia());
                FeedMedia media = item.getMedia();
                FeedMedia parsedMedia = parsedItem.getMedia();
                assertEquals(media.getDownload_url(), parsedMedia.getDownload_url());
                assertEquals(media.getSize(), parsedMedia.getSize());
                assertEquals(media.getMime_type(), parsedMedia.getMime_type());
            }
            if (item.hasItemImage()) {
                assertTrue(parsedItem.hasItemImage());
                FeedImage image = item.getImage();
                FeedImage parsedImage = parsedItem.getImage();
                assertEquals(image.getTitle(), parsedImage.getTitle());
                assertEquals(image.getDownload_url(), parsedImage.getDownload_url());
            }
            if (item.getChapters() != null) {
                assertNotNull(parsedItem.getChapters());
                assertEquals(item.getChapters().size(), parsedItem.getChapters().size());
                List<Chapter> chapters = item.getChapters();
                List<Chapter> parsedChapters = parsedItem.getChapters();
                for (int j = 0; j < chapters.size(); j++) {
                    Chapter chapter = chapters.get(j);
                    Chapter parsedChapter = parsedChapters.get(j);
                    assertEquals(chapter.getTitle(), parsedChapter.getTitle());
                    assertEquals(chapter.getLink(), parsedChapter.getLink());
                }
            }
        }
    }
}
Also used : FeedImage(de.danoeh.antennapod.core.feed.FeedImage) FeedItem(de.danoeh.antennapod.core.feed.FeedItem) FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia) Chapter(de.danoeh.antennapod.core.feed.Chapter)

Example 37 with FeedMedia

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

the class CastUtils method getPlayable.

//TODO make unit tests for all the conversion methods
/**
     * Converts {@link MediaInfo} objects into the appropriate implementation of {@link Playable}.
     *
     * Unless <code>searchFeedMedia</code> is set to <code>false</code>, this method should not run
     * on the GUI thread.
     *
     * @param media The {@link MediaInfo} object to be converted.
     * @param searchFeedMedia If set to <code>true</code>, the database will be queried to find a
     *              {@link FeedMedia} instance that matches {@param media}.
     * @return {@link Playable} object in a format proper for casting.
     */
public static Playable getPlayable(MediaInfo media, boolean searchFeedMedia) {
    Log.d(TAG, "getPlayable called with searchFeedMedia=" + searchFeedMedia);
    if (media == null) {
        Log.d(TAG, "MediaInfo object provided is null, not converting to any Playable instance");
        return null;
    }
    MediaMetadata metadata = media.getMetadata();
    int version = metadata.getInt(KEY_FORMAT_VERSION);
    if (version <= 0 || version > MAX_VERSION_FORWARD_COMPATIBILITY) {
        Log.w(TAG, "MediaInfo object obtained from the cast device is not compatible with this" + "version of AntennaPod CastUtils, curVer=" + FORMAT_VERSION_VALUE + ", object version=" + version);
        return null;
    }
    Playable result = null;
    if (searchFeedMedia) {
        long mediaId = metadata.getInt(KEY_MEDIA_ID);
        if (mediaId > 0) {
            FeedMedia fMedia = DBReader.getFeedMedia(mediaId);
            if (fMedia != null) {
                try {
                    fMedia.loadMetadata();
                    if (matches(media, fMedia)) {
                        result = fMedia;
                        Log.d(TAG, "FeedMedia object obtained matches the MediaInfo provided. id=" + mediaId);
                    } else {
                        Log.d(TAG, "FeedMedia object obtained does NOT match the MediaInfo provided. id=" + mediaId);
                    }
                } catch (Playable.PlayableException e) {
                    Log.e(TAG, "Unable to load FeedMedia metadata to compare with MediaInfo", e);
                }
            } else {
                Log.d(TAG, "Unable to find in database a FeedMedia with id=" + mediaId);
            }
        }
        if (result == null) {
            FeedItem feedItem = DBReader.getFeedItem(metadata.getString(KEY_FEED_URL), metadata.getString(KEY_EPISODE_IDENTIFIER));
            if (feedItem != null) {
                result = feedItem.getMedia();
                Log.d(TAG, "Found episode that matches the MediaInfo provided. Using its media, if existing.");
            }
        }
    }
    if (result == null) {
        List<WebImage> imageList = metadata.getImages();
        String imageUrl = null;
        if (!imageList.isEmpty()) {
            imageUrl = imageList.get(0).getUrl().toString();
        }
        result = new RemoteMedia(media.getContentId(), metadata.getString(KEY_EPISODE_IDENTIFIER), metadata.getString(KEY_FEED_URL), metadata.getString(MediaMetadata.KEY_SUBTITLE), metadata.getString(MediaMetadata.KEY_TITLE), metadata.getString(KEY_EPISODE_LINK), metadata.getString(MediaMetadata.KEY_ARTIST), imageUrl, metadata.getString(KEY_FEED_WEBSITE), media.getContentType(), metadata.getDate(MediaMetadata.KEY_RELEASE_DATE).getTime());
        String notes = metadata.getString(KEY_EPISODE_NOTES);
        if (!TextUtils.isEmpty(notes)) {
            ((RemoteMedia) result).setNotes(notes);
        }
        Log.d(TAG, "Converted MediaInfo into RemoteMedia");
    }
    if (result.getDuration() == 0 && media.getStreamDuration() > 0) {
        result.setDuration((int) media.getStreamDuration());
    }
    return result;
}
Also used : FeedItem(de.danoeh.antennapod.core.feed.FeedItem) Playable(de.danoeh.antennapod.core.util.playback.Playable) FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia) MediaMetadata(com.google.android.gms.cast.MediaMetadata) WebImage(com.google.android.gms.common.images.WebImage)

Example 38 with FeedMedia

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

the class NSMedia method handleElementStart.

@Override
public SyndElement handleElementStart(String localName, HandlerState state, Attributes attributes) {
    if (CONTENT.equals(localName)) {
        String url = attributes.getValue(DOWNLOAD_URL);
        String type = attributes.getValue(MIME_TYPE);
        String defaultStr = attributes.getValue(DEFAULT);
        String medium = attributes.getValue(MEDIUM);
        boolean validTypeMedia = false;
        boolean validTypeImage = false;
        boolean isDefault = "true".equals(defaultStr);
        if (MEDIUM_AUDIO.equals(medium) || MEDIUM_VIDEO.equals(medium)) {
            validTypeMedia = true;
        } else if (MEDIUM_IMAGE.equals(medium)) {
            validTypeImage = true;
        } else {
            if (type == null) {
                type = SyndTypeUtils.getMimeTypeFromUrl(url);
            }
            if (SyndTypeUtils.enclosureTypeValid(type)) {
                validTypeMedia = true;
            } else if (SyndTypeUtils.imageTypeValid(type)) {
                validTypeImage = true;
            }
        }
        if (state.getCurrentItem() != null && (state.getCurrentItem().getMedia() == null || isDefault) && url != null && validTypeMedia) {
            long size = 0;
            String sizeStr = attributes.getValue(SIZE);
            try {
                size = Long.parseLong(sizeStr);
            } catch (NumberFormatException e) {
                Log.e(TAG, "Size \"" + sizeStr + "\" could not be parsed.");
            }
            int durationMs = 0;
            String durationStr = attributes.getValue(DURATION);
            if (!TextUtils.isEmpty(durationStr)) {
                try {
                    long duration = Long.parseLong(durationStr);
                    durationMs = (int) TimeUnit.MILLISECONDS.convert(duration, TimeUnit.SECONDS);
                } catch (NumberFormatException e) {
                    Log.e(TAG, "Duration \"" + durationStr + "\" could not be parsed");
                }
            }
            FeedMedia media = new FeedMedia(state.getCurrentItem(), url, size, type);
            if (durationMs > 0) {
                media.setDuration(durationMs);
            }
            state.getCurrentItem().setMedia(media);
        } else if (state.getCurrentItem() != null && url != null && validTypeImage) {
            FeedImage image = new FeedImage();
            image.setDownload_url(url);
            image.setOwner(state.getCurrentItem());
            state.getCurrentItem().setImage(image);
        }
    } else if (IMAGE.equals(localName)) {
        String url = attributes.getValue(IMAGE_URL);
        if (url != null) {
            FeedImage image = new FeedImage();
            image.setDownload_url(url);
            if (state.getCurrentItem() != null) {
                image.setOwner(state.getCurrentItem());
                state.getCurrentItem().setImage(image);
            } else {
                if (state.getFeed().getImage() == null) {
                    image.setOwner(state.getFeed());
                    state.getFeed().setImage(image);
                }
            }
        }
    } else if (DESCRIPTION.equals(localName)) {
        String type = attributes.getValue(DESCRIPTION_TYPE);
        return new AtomText(localName, this, type);
    }
    return new SyndElement(localName, this);
}
Also used : FeedImage(de.danoeh.antennapod.core.feed.FeedImage) FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia) AtomText(de.danoeh.antennapod.core.syndication.namespace.atom.AtomText)

Example 39 with FeedMedia

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

the class MediaplayerActivity method onOptionsItemSelected.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (controller == null) {
        return false;
    }
    Playable media = controller.getMedia();
    if (item.getItemId() == android.R.id.home) {
        Intent intent = new Intent(MediaplayerActivity.this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
        return true;
    } else {
        if (media != null) {
            switch(item.getItemId()) {
                case R.id.add_to_favorites_item:
                    if (media instanceof FeedMedia) {
                        FeedItem feedItem = ((FeedMedia) media).getItem();
                        if (feedItem != null) {
                            DBWriter.addFavoriteItem(feedItem);
                            isFavorite = true;
                            invalidateOptionsMenu();
                            Toast.makeText(this, R.string.added_to_favorites, Toast.LENGTH_SHORT).show();
                        }
                    }
                    break;
                case R.id.remove_from_favorites_item:
                    if (media instanceof FeedMedia) {
                        FeedItem feedItem = ((FeedMedia) media).getItem();
                        if (feedItem != null) {
                            DBWriter.removeFavoriteItem(feedItem);
                            isFavorite = false;
                            invalidateOptionsMenu();
                            Toast.makeText(this, R.string.removed_from_favorites, Toast.LENGTH_SHORT).show();
                        }
                    }
                    break;
                case R.id.disable_sleeptimer_item:
                    if (controller.serviceAvailable()) {
                        MaterialDialog.Builder stDialog = new MaterialDialog.Builder(this);
                        stDialog.title(R.string.sleep_timer_label);
                        stDialog.content(getString(R.string.time_left_label) + Converter.getDurationStringLong((int) controller.getSleepTimerTimeLeft()));
                        stDialog.positiveText(R.string.disable_sleeptimer_label);
                        stDialog.negativeText(R.string.cancel_label);
                        stDialog.onPositive((dialog, which) -> {
                            dialog.dismiss();
                            controller.disableSleepTimer();
                        });
                        stDialog.onNegative((dialog, which) -> dialog.dismiss());
                        stDialog.build().show();
                    }
                    break;
                case R.id.set_sleeptimer_item:
                    if (controller.serviceAvailable()) {
                        SleepTimerDialog td = new SleepTimerDialog(this) {

                            @Override
                            public void onTimerSet(long millis, boolean shakeToReset, boolean vibrate) {
                                controller.setSleepTimer(millis, shakeToReset, vibrate);
                            }
                        };
                        td.createNewDialog().show();
                    }
                    break;
                case R.id.audio_controls:
                    MaterialDialog dialog = new MaterialDialog.Builder(this).title(R.string.audio_controls).customView(R.layout.audio_controls, true).neutralText(R.string.close_label).onNeutral((dialog1, which) -> {
                        final SeekBar left = (SeekBar) dialog1.findViewById(R.id.volume_left);
                        final SeekBar right = (SeekBar) dialog1.findViewById(R.id.volume_right);
                        UserPreferences.setVolume(left.getProgress(), right.getProgress());
                    }).show();
                    final SeekBar barPlaybackSpeed = (SeekBar) dialog.findViewById(R.id.playback_speed);
                    final Button butDecSpeed = (Button) dialog.findViewById(R.id.butDecSpeed);
                    butDecSpeed.setOnClickListener(v -> {
                        if (controller != null && controller.canSetPlaybackSpeed()) {
                            barPlaybackSpeed.setProgress(barPlaybackSpeed.getProgress() - 2);
                        } else {
                            VariableSpeedDialog.showGetPluginDialog(this);
                        }
                    });
                    final Button butIncSpeed = (Button) dialog.findViewById(R.id.butIncSpeed);
                    butIncSpeed.setOnClickListener(v -> {
                        if (controller != null && controller.canSetPlaybackSpeed()) {
                            barPlaybackSpeed.setProgress(barPlaybackSpeed.getProgress() + 2);
                        } else {
                            VariableSpeedDialog.showGetPluginDialog(this);
                        }
                    });
                    final TextView txtvPlaybackSpeed = (TextView) dialog.findViewById(R.id.txtvPlaybackSpeed);
                    float currentSpeed = 1.0f;
                    try {
                        currentSpeed = Float.parseFloat(UserPreferences.getPlaybackSpeed());
                    } catch (NumberFormatException e) {
                        Log.e(TAG, Log.getStackTraceString(e));
                        UserPreferences.setPlaybackSpeed(String.valueOf(currentSpeed));
                    }
                    txtvPlaybackSpeed.setText(String.format("%.2fx", currentSpeed));
                    barPlaybackSpeed.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                            if (controller != null && controller.canSetPlaybackSpeed()) {
                                float playbackSpeed = (progress + 10) / 20.0f;
                                controller.setPlaybackSpeed(playbackSpeed);
                                String speedPref = String.format(Locale.US, "%.2f", playbackSpeed);
                                UserPreferences.setPlaybackSpeed(speedPref);
                                String speedStr = String.format("%.2fx", playbackSpeed);
                                txtvPlaybackSpeed.setText(speedStr);
                            } else if (fromUser) {
                                float speed = Float.valueOf(UserPreferences.getPlaybackSpeed());
                                barPlaybackSpeed.post(() -> barPlaybackSpeed.setProgress((int) (20 * speed) - 10));
                            }
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {
                            if (controller != null && !controller.canSetPlaybackSpeed()) {
                                VariableSpeedDialog.showGetPluginDialog(MediaplayerActivity.this);
                            }
                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {
                        }
                    });
                    barPlaybackSpeed.setProgress((int) (20 * currentSpeed) - 10);
                    final SeekBar barLeftVolume = (SeekBar) dialog.findViewById(R.id.volume_left);
                    barLeftVolume.setProgress(UserPreferences.getLeftVolumePercentage());
                    final SeekBar barRightVolume = (SeekBar) dialog.findViewById(R.id.volume_right);
                    barRightVolume.setProgress(UserPreferences.getRightVolumePercentage());
                    final CheckBox stereoToMono = (CheckBox) dialog.findViewById(R.id.stereo_to_mono);
                    stereoToMono.setChecked(UserPreferences.stereoToMono());
                    if (controller != null && !controller.canDownmix()) {
                        stereoToMono.setEnabled(false);
                        String sonicOnly = getString(R.string.sonic_only);
                        stereoToMono.setText(stereoToMono.getText() + " [" + sonicOnly + "]");
                    }
                    barLeftVolume.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                            controller.setVolume(Converter.getVolumeFromPercentage(progress), Converter.getVolumeFromPercentage(barRightVolume.getProgress()));
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {
                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {
                        }
                    });
                    barRightVolume.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                            controller.setVolume(Converter.getVolumeFromPercentage(barLeftVolume.getProgress()), Converter.getVolumeFromPercentage(progress));
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {
                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {
                        }
                    });
                    stereoToMono.setOnCheckedChangeListener((buttonView, isChecked) -> {
                        UserPreferences.stereoToMono(isChecked);
                        if (controller != null) {
                            controller.setDownmix(isChecked);
                        }
                    });
                    break;
                case R.id.visit_website_item:
                    Uri uri = Uri.parse(media.getWebsiteLink());
                    startActivity(new Intent(Intent.ACTION_VIEW, uri));
                    break;
                case R.id.support_item:
                    if (media instanceof FeedMedia) {
                        DBTasks.flattrItemIfLoggedIn(this, ((FeedMedia) media).getItem());
                    }
                    break;
                case R.id.share_link_item:
                    if (media instanceof FeedMedia) {
                        ShareUtils.shareFeedItemLink(this, ((FeedMedia) media).getItem());
                    }
                    break;
                case R.id.share_download_url_item:
                    if (media instanceof FeedMedia) {
                        ShareUtils.shareFeedItemDownloadLink(this, ((FeedMedia) media).getItem());
                    }
                    break;
                case R.id.share_link_with_position_item:
                    if (media instanceof FeedMedia) {
                        ShareUtils.shareFeedItemLink(this, ((FeedMedia) media).getItem(), true);
                    }
                    break;
                case R.id.share_download_url_with_position_item:
                    if (media instanceof FeedMedia) {
                        ShareUtils.shareFeedItemDownloadLink(this, ((FeedMedia) media).getItem(), true);
                    }
                    break;
                default:
                    return false;
            }
            return true;
        } else {
            return false;
        }
    }
}
Also used : Converter(de.danoeh.antennapod.core.util.Converter) PlaybackController(de.danoeh.antennapod.core.util.playback.PlaybackController) ImageButton(android.widget.ImageButton) Bundle(android.os.Bundle) SleepTimerDialog(de.danoeh.antennapod.dialog.SleepTimerDialog) Uri(android.net.Uri) AndroidSchedulers(rx.android.schedulers.AndroidSchedulers) Intent(android.content.Intent) PixelFormat(android.graphics.PixelFormat) TypedArray(android.content.res.TypedArray) MenuItem(android.view.MenuItem) Observable(rx.Observable) UserPreferences(de.danoeh.antennapod.core.preferences.UserPreferences) SeekBar(android.widget.SeekBar) CheckBox(android.widget.CheckBox) MenuInflater(android.view.MenuInflater) Locale(java.util.Locale) ShareUtils(de.danoeh.antennapod.core.util.ShareUtils) Toast(android.widget.Toast) Menu(android.view.Menu) Schedulers(rx.schedulers.Schedulers) View(android.view.View) Button(android.widget.Button) OnSeekBarChangeListener(android.widget.SeekBar.OnSeekBarChangeListener) StorageUtils(de.danoeh.antennapod.core.util.StorageUtils) Playable(de.danoeh.antennapod.core.util.playback.Playable) Build(android.os.Build) TargetApi(android.annotation.TargetApi) Log(android.util.Log) MediaPlayerError(de.danoeh.antennapod.core.util.playback.MediaPlayerError) PlaybackService(de.danoeh.antennapod.core.service.playback.PlaybackService) FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia) R(de.danoeh.antennapod.R) VariableSpeedDialog(de.danoeh.antennapod.dialog.VariableSpeedDialog) Color(android.graphics.Color) FeedItem(de.danoeh.antennapod.core.feed.FeedItem) FontAwesomeIcons(com.joanzapata.iconify.fonts.FontAwesomeIcons) IconDrawable(com.joanzapata.iconify.IconDrawable) AlertDialog(android.support.v7.app.AlertDialog) TextView(android.widget.TextView) Glide(com.bumptech.glide.Glide) SharedPreferences(android.content.SharedPreferences) DBWriter(de.danoeh.antennapod.core.storage.DBWriter) Flavors(de.danoeh.antennapod.core.util.Flavors) DBReader(de.danoeh.antennapod.core.storage.DBReader) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) DBTasks(de.danoeh.antennapod.core.storage.DBTasks) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) SeekBar(android.widget.SeekBar) Intent(android.content.Intent) OnSeekBarChangeListener(android.widget.SeekBar.OnSeekBarChangeListener) Uri(android.net.Uri) FeedItem(de.danoeh.antennapod.core.feed.FeedItem) Playable(de.danoeh.antennapod.core.util.playback.Playable) FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia) ImageButton(android.widget.ImageButton) Button(android.widget.Button) CheckBox(android.widget.CheckBox) SleepTimerDialog(de.danoeh.antennapod.dialog.SleepTimerDialog) TextView(android.widget.TextView)

Example 40 with FeedMedia

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

the class MediaplayerActivity method onPrepareOptionsMenu.

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    if (controller == null) {
        return false;
    }
    Playable media = controller.getMedia();
    menu.findItem(R.id.support_item).setVisible(media != null && media.getPaymentLink() != null && (media instanceof FeedMedia) && ((FeedMedia) media).getItem() != null && ((FeedMedia) media).getItem().getFlattrStatus().flattrable());
    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() != null && ((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.add_to_favorites_item).setVisible(false);
    menu.findItem(R.id.remove_from_favorites_item).setVisible(false);
    if (media != null && media instanceof FeedMedia) {
        menu.findItem(R.id.add_to_favorites_item).setVisible(!isFavorite);
        menu.findItem(R.id.remove_from_favorites_item).setVisible(isFavorite);
    }
    boolean sleepTimerSet = controller.sleepTimerActive();
    boolean sleepTimerNotSet = controller.sleepTimerNotActive();
    menu.findItem(R.id.set_sleeptimer_item).setVisible(sleepTimerNotSet);
    menu.findItem(R.id.disable_sleeptimer_item).setVisible(sleepTimerSet);
    if (this instanceof AudioplayerActivity) {
        int[] attrs = { R.attr.action_bar_icon_color };
        TypedArray ta = obtainStyledAttributes(UserPreferences.getTheme(), attrs);
        int textColor = ta.getColor(0, Color.GRAY);
        ta.recycle();
        menu.findItem(R.id.audio_controls).setIcon(new IconDrawable(this, FontAwesomeIcons.fa_sliders).color(textColor).actionBarSize());
    } else {
        menu.findItem(R.id.audio_controls).setVisible(false);
    }
    return true;
}
Also used : Playable(de.danoeh.antennapod.core.util.playback.Playable) FeedMedia(de.danoeh.antennapod.core.feed.FeedMedia) TypedArray(android.content.res.TypedArray) IconDrawable(com.joanzapata.iconify.IconDrawable)

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