Search in sources :

Example 71 with Feed

use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.

the class DownloadLogFragment method onListItemClick.

@Override
public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Object item = adapter.getItem(position);
    if (item instanceof Downloader) {
        DownloadRequest downloadRequest = ((Downloader) item).getDownloadRequest();
        DownloadService.cancel(getContext(), downloadRequest.getSource());
        if (downloadRequest.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) {
            FeedMedia media = DBReader.getFeedMedia(downloadRequest.getFeedfileId());
            FeedItem feedItem = media.getItem();
            feedItem.disableAutoDownload();
            DBWriter.setFeedItem(feedItem);
        }
    } else if (item instanceof DownloadStatus) {
        DownloadStatus status = (DownloadStatus) item;
        String url = "unknown";
        String message = getString(R.string.download_successful);
        if (status.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) {
            FeedMedia media = DBReader.getFeedMedia(status.getFeedfileId());
            if (media != null) {
                url = media.getDownload_url();
            }
        } else if (status.getFeedfileType() == Feed.FEEDFILETYPE_FEED) {
            Feed feed = DBReader.getFeed(status.getFeedfileId());
            if (feed != null) {
                url = feed.getDownload_url();
            }
        }
        if (!status.isSuccessful()) {
            message = status.getReasonDetailed();
        }
        String messageFull = getString(R.string.download_error_details_message, message, url);
        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
        builder.setTitle(R.string.download_error_details);
        builder.setMessage(messageFull);
        builder.setPositiveButton(android.R.string.ok, null);
        builder.setNeutralButton(R.string.copy_to_clipboard, (dialog, which) -> {
            ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
            ClipData clip = ClipData.newPlainText(getString(R.string.download_error_details), messageFull);
            clipboard.setPrimaryClip(clip);
            ((MainActivity) getActivity()).showSnackbarAbovePlayer(R.string.copied_to_clipboard, Snackbar.LENGTH_SHORT);
        });
        Dialog dialog = builder.show();
        ((TextView) dialog.findViewById(android.R.id.message)).setTextIsSelectable(true);
    }
}
Also used : AlertDialog(androidx.appcompat.app.AlertDialog) Context(android.content.Context) Bundle(android.os.Bundle) AlertDialog(androidx.appcompat.app.AlertDialog) AutoUpdateManager(de.danoeh.antennapod.core.util.download.AutoUpdateManager) NonNull(androidx.annotation.NonNull) Dialog(android.app.Dialog) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) MenuItem(android.view.MenuItem) ArrayList(java.util.ArrayList) ClipData(android.content.ClipData) DownloadRequest(de.danoeh.antennapod.core.service.download.DownloadRequest) DownloadLogEvent(de.danoeh.antennapod.core.event.DownloadLogEvent) EventBus(org.greenrobot.eventbus.EventBus) Menu(android.view.Menu) ClipboardManager(android.content.ClipboardManager) View(android.view.View) DownloaderUpdate(de.danoeh.antennapod.core.event.DownloaderUpdate) Observable(io.reactivex.Observable) Schedulers(io.reactivex.schedulers.Schedulers) DownloadStatus(de.danoeh.antennapod.core.service.download.DownloadStatus) Log(android.util.Log) Feed(de.danoeh.antennapod.model.feed.Feed) Downloader(de.danoeh.antennapod.core.service.download.Downloader) FeedMedia(de.danoeh.antennapod.model.feed.FeedMedia) R(de.danoeh.antennapod.R) EmptyViewHandler(de.danoeh.antennapod.view.EmptyViewHandler) FeedItem(de.danoeh.antennapod.model.feed.FeedItem) ThreadMode(org.greenrobot.eventbus.ThreadMode) MenuItemUtils(de.danoeh.antennapod.core.menuhandler.MenuItemUtils) MainActivity(de.danoeh.antennapod.activity.MainActivity) Disposable(io.reactivex.disposables.Disposable) List(java.util.List) TextView(android.widget.TextView) Nullable(androidx.annotation.Nullable) Subscribe(org.greenrobot.eventbus.Subscribe) DownloadLogAdapter(de.danoeh.antennapod.adapter.DownloadLogAdapter) DownloadEvent(de.danoeh.antennapod.core.event.DownloadEvent) DBWriter(de.danoeh.antennapod.core.storage.DBWriter) DBReader(de.danoeh.antennapod.core.storage.DBReader) ListFragment(androidx.fragment.app.ListFragment) ListView(android.widget.ListView) Snackbar(com.google.android.material.snackbar.Snackbar) DownloadService(de.danoeh.antennapod.core.service.download.DownloadService) ClipboardManager(android.content.ClipboardManager) Downloader(de.danoeh.antennapod.core.service.download.Downloader) DownloadRequest(de.danoeh.antennapod.core.service.download.DownloadRequest) FeedItem(de.danoeh.antennapod.model.feed.FeedItem) FeedMedia(de.danoeh.antennapod.model.feed.FeedMedia) AlertDialog(androidx.appcompat.app.AlertDialog) Dialog(android.app.Dialog) DownloadStatus(de.danoeh.antennapod.core.service.download.DownloadStatus) ClipData(android.content.ClipData) Feed(de.danoeh.antennapod.model.feed.Feed)

Example 72 with Feed

use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.

the class FeedSettingsFragment method onCreateView.

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.feedsettings, container, false);
    long feedId = getArguments().getLong(EXTRA_FEED_ID);
    Toolbar toolbar = root.findViewById(R.id.toolbar);
    toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack());
    getParentFragmentManager().beginTransaction().replace(R.id.settings_fragment_container, FeedSettingsPreferenceFragment.newInstance(feedId), "settings_fragment").commitAllowingStateLoss();
    disposable = Maybe.create((MaybeOnSubscribe<Feed>) emitter -> {
        Feed feed = DBReader.getFeed(feedId);
        if (feed != null) {
            emitter.onSuccess(feed);
        } else {
            emitter.onComplete();
        }
    }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> toolbar.setSubtitle(result.getTitle()), error -> Log.d(TAG, Log.getStackTraceString(error)), () -> {
    });
    return root;
}
Also used : MaybeOnSubscribe(io.reactivex.MaybeOnSubscribe) Bundle(android.os.Bundle) AlertDialog(androidx.appcompat.app.AlertDialog) AuthenticationDialog(de.danoeh.antennapod.dialog.AuthenticationDialog) NonNull(androidx.annotation.NonNull) VolumeAdaptionSetting(de.danoeh.antennapod.model.feed.VolumeAdaptionSetting) Maybe(io.reactivex.Maybe) PreferenceFragmentCompat(androidx.preference.PreferenceFragmentCompat) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) UserPreferences(de.danoeh.antennapod.core.preferences.UserPreferences) FeedPreferences(de.danoeh.antennapod.model.feed.FeedPreferences) Locale(java.util.Locale) EventBus(org.greenrobot.eventbus.EventBus) Fragment(androidx.fragment.app.Fragment) View(android.view.View) Schedulers(io.reactivex.schedulers.Schedulers) RecyclerView(androidx.recyclerview.widget.RecyclerView) SpeedPresetChangedEvent(de.danoeh.antennapod.event.settings.SpeedPresetChangedEvent) TagSettingsDialog(de.danoeh.antennapod.dialog.TagSettingsDialog) Log(android.util.Log) Feed(de.danoeh.antennapod.model.feed.Feed) VolumeAdaptionChangedEvent(de.danoeh.antennapod.event.settings.VolumeAdaptionChangedEvent) EpisodeFilterDialog(de.danoeh.antennapod.dialog.EpisodeFilterDialog) FeedFilter(de.danoeh.antennapod.model.feed.FeedFilter) LayoutInflater(android.view.LayoutInflater) R(de.danoeh.antennapod.R) SwitchPreferenceCompat(androidx.preference.SwitchPreferenceCompat) Preference(androidx.preference.Preference) ViewGroup(android.view.ViewGroup) SkipIntroEndingChangedEvent(de.danoeh.antennapod.event.settings.SkipIntroEndingChangedEvent) Disposable(io.reactivex.disposables.Disposable) Nullable(androidx.annotation.Nullable) PlaybackSpeedFeedSettingDialogBinding(de.danoeh.antennapod.databinding.PlaybackSpeedFeedSettingDialogBinding) DBWriter(de.danoeh.antennapod.core.storage.DBWriter) ListPreference(androidx.preference.ListPreference) FeedPreferenceSkipDialog(de.danoeh.antennapod.dialog.FeedPreferenceSkipDialog) DBReader(de.danoeh.antennapod.core.storage.DBReader) Toolbar(androidx.appcompat.widget.Toolbar) Collections(java.util.Collections) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) Toolbar(androidx.appcompat.widget.Toolbar) Feed(de.danoeh.antennapod.model.feed.Feed) Nullable(androidx.annotation.Nullable)

Example 73 with Feed

use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.

the class AddFeedFragment method addLocalFolder.

private Feed addLocalFolder(Uri uri) {
    if (Build.VERSION.SDK_INT < 21) {
        return null;
    }
    getActivity().getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
    DocumentFile documentFile = DocumentFile.fromTreeUri(getContext(), uri);
    if (documentFile == null) {
        throw new IllegalArgumentException("Unable to retrieve document tree");
    }
    String title = documentFile.getName();
    if (title == null) {
        title = getString(R.string.local_folder);
    }
    Feed dirFeed = new Feed(Feed.PREFIX_LOCAL_FOLDER + uri.toString(), null, title);
    dirFeed.setItems(Collections.emptyList());
    dirFeed.setSortOrder(SortOrder.EPISODE_TITLE_A_Z);
    Feed fromDatabase = DBTasks.updateFeed(getContext(), dirFeed, false);
    DBTasks.forceRefreshFeed(getContext(), fromDatabase, true);
    return fromDatabase;
}
Also used : DocumentFile(androidx.documentfile.provider.DocumentFile) Feed(de.danoeh.antennapod.model.feed.Feed)

Example 74 with Feed

use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.

the class DownloadServiceTest method setUp.

@Before
public void setUp() throws Exception {
    EspressoTestUtils.clearDatabase();
    EspressoTestUtils.clearPreferences();
    origFactory = DownloadService.getDownloaderFactory();
    Feed testFeed = setUpTestFeeds();
    testMedia11 = testFeed.getItemAtIndex(0).getMedia();
}
Also used : Feed(de.danoeh.antennapod.model.feed.Feed) Before(org.junit.Before)

Example 75 with Feed

use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.

the class PlaybackServiceMediaPlayerTest method writeTestPlayable.

private Playable writeTestPlayable(String downloadUrl, String fileUrl) {
    Feed f = new Feed(0, null, "f", "l", "d", null, null, null, null, "i", null, null, "l", false);
    FeedPreferences prefs = new FeedPreferences(f.getId(), false, FeedPreferences.AutoDeleteAction.NO, VolumeAdaptionSetting.OFF, null, null);
    f.setPreferences(prefs);
    f.setItems(new ArrayList<>());
    FeedItem i = new FeedItem(0, "t", "i", "l", new Date(), FeedItem.UNPLAYED, f);
    f.getItems().add(i);
    FeedMedia media = new FeedMedia(0, i, 0, 0, 0, "audio/wav", fileUrl, downloadUrl, fileUrl != null, null, 0, 0);
    i.setMedia(media);
    PodDBAdapter adapter = PodDBAdapter.getInstance();
    adapter.open();
    adapter.setCompleteFeed(f);
    assertTrue(media.getId() != 0);
    adapter.close();
    return media;
}
Also used : FeedPreferences(de.danoeh.antennapod.model.feed.FeedPreferences) PodDBAdapter(de.danoeh.antennapod.core.storage.PodDBAdapter) FeedItem(de.danoeh.antennapod.model.feed.FeedItem) FeedMedia(de.danoeh.antennapod.model.feed.FeedMedia) Date(java.util.Date) Feed(de.danoeh.antennapod.model.feed.Feed)

Aggregations

Feed (de.danoeh.antennapod.model.feed.Feed)125 FeedItem (de.danoeh.antennapod.model.feed.FeedItem)75 Test (org.junit.Test)61 ArrayList (java.util.ArrayList)43 Date (java.util.Date)37 File (java.io.File)31 FeedMedia (de.danoeh.antennapod.model.feed.FeedMedia)27 Cursor (android.database.Cursor)15 FeedPreferences (de.danoeh.antennapod.model.feed.FeedPreferences)12 NonNull (androidx.annotation.NonNull)10 Nullable (androidx.annotation.Nullable)8 View (android.view.View)7 DownloadStatus (de.danoeh.antennapod.core.service.download.DownloadStatus)7 Log (android.util.Log)6 R (de.danoeh.antennapod.R)6 DownloadRequest (de.danoeh.antennapod.core.service.download.DownloadRequest)6 List (java.util.List)6 ViewGroup (android.view.ViewGroup)5 AlertDialog (androidx.appcompat.app.AlertDialog)5 RequestOptions (com.bumptech.glide.request.RequestOptions)5