summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java63
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java49
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java13
-rw-r--r--app/src/main/res/layout/share_episode_dialog.xml17
-rw-r--r--app/src/main/res/menu/feeditemlist_context.xml25
7 files changed, 88 insertions, 83 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java
index 8104d3539..614cc1e71 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java
@@ -18,21 +18,21 @@ import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.util.ShareUtils;
public class ShareDialog extends DialogFragment {
-
private static final String ARGUMENT_FEED_ITEM = "feedItem";
+ private static final String PREF_NAME = "ShareDialog";
+ private static final String PREF_SHARE_DIALOG_OPTION = "prefShareDialogOption";
+ private static final String PREF_SHARE_EPISODE_START_AT = "prefShareEpisodeStartAt";
+ private static final String PREF_VALUE_WEBSITE = "website";
+ private static final String PREF_VALUE_MEDIA_URL = "media";
- private static final String TAG = "ShareDialog";
private Context ctx;
private FeedItem item;
+ private SharedPreferences prefs;
- private static final String PREF_SHARE_DIALOG_OPTION = "prefShareDialogOption";
- private static final String PREF_SHARE_EPISODE_START_AT = "prefShareEpisodeStartAt";
-
- private RadioGroup radioGroup;
private RadioButton radioEpisodeWebsite;
+ private RadioButton radioMediaFileUrl;
private RadioButton radioMediaFile;
private CheckBox checkBoxStartAt;
- private SharedPreferences prefs;
public ShareDialog() {
// Empty constructor required for DialogFragment
@@ -52,7 +52,7 @@ public class ShareDialog extends DialogFragment {
if (getArguments() != null) {
ctx = getActivity();
item = (FeedItem) getArguments().getSerializable(ARGUMENT_FEED_ITEM);
- prefs = getActivity().getSharedPreferences("ShareDialog", Context.MODE_PRIVATE);
+ prefs = getActivity().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
}
View content = View.inflate(ctx, R.layout.share_episode_dialog, null);
@@ -60,8 +60,12 @@ public class ShareDialog extends DialogFragment {
builder.setTitle(R.string.share_label);
builder.setView(content);
- radioGroup = content.findViewById(R.id.share_dialog_radio_group);
+ RadioGroup radioGroup = content.findViewById(R.id.share_dialog_radio_group);
+ radioGroup.setOnCheckedChangeListener((group, checkedId) ->
+ checkBoxStartAt.setEnabled(checkedId != R.id.share_media_file_radio));
+
radioEpisodeWebsite = content.findViewById(R.id.share_episode_website_radio);
+ radioMediaFileUrl = content.findViewById(R.id.share_media_file_url_radio);
radioMediaFile = content.findViewById(R.id.share_media_file_radio);
checkBoxStartAt = content.findViewById(R.id.share_start_at_timer_dialog);
@@ -71,10 +75,14 @@ public class ShareDialog extends DialogFragment {
boolean includePlaybackPosition = checkBoxStartAt.isChecked();
if (radioEpisodeWebsite.isChecked()) {
ShareUtils.shareFeedItemLink(ctx, item, includePlaybackPosition);
- prefs.edit().putString(PREF_SHARE_DIALOG_OPTION, "website").apply();
- } else {
+ prefs.edit().putString(PREF_SHARE_DIALOG_OPTION, PREF_VALUE_WEBSITE).apply();
+ } else if (radioMediaFileUrl.isChecked()) {
ShareUtils.shareFeedItemDownloadLink(ctx, item, includePlaybackPosition);
- prefs.edit().putString(PREF_SHARE_DIALOG_OPTION, "media").apply();
+ prefs.edit().putString(PREF_SHARE_DIALOG_OPTION, PREF_VALUE_MEDIA_URL).apply();
+ } else if (radioMediaFile.isChecked()) {
+ ShareUtils.shareFeedItemFile(ctx, item.getMedia());
+ } else {
+ throw new IllegalStateException("Unknown share method");
}
prefs.edit().putBoolean(PREF_SHARE_EPISODE_START_AT, includePlaybackPosition).apply();
}).setNegativeButton(R.string.cancel_label, (dialog, id) -> dialog.dismiss());
@@ -85,26 +93,23 @@ public class ShareDialog extends DialogFragment {
private void setupOptions() {
final boolean hasMedia = item.getMedia() != null;
- if (!ShareUtils.hasLinkToShare(item)) {
- radioEpisodeWebsite.setVisibility(View.GONE);
- radioMediaFile.setChecked(true);
- }
+ boolean downloaded = hasMedia && item.getMedia().isDownloaded();
+ radioMediaFile.setVisibility(downloaded ? View.VISIBLE : View.GONE);
- if (!hasMedia || item.getMedia().getDownload_url() == null) {
- radioMediaFile.setVisibility(View.GONE);
- radioEpisodeWebsite.setChecked(true);
- }
+ radioEpisodeWebsite.setVisibility(ShareUtils.hasLinkToShare(item) ? View.VISIBLE : View.GONE);
- if (radioEpisodeWebsite.getVisibility() == View.VISIBLE && radioMediaFile.getVisibility() == View.VISIBLE) {
- String option = prefs.getString(PREF_SHARE_DIALOG_OPTION, "website");
- if (option.equals("website")) {
- radioEpisodeWebsite.setChecked(true);
- radioMediaFile.setChecked(false);
- } else {
- radioEpisodeWebsite.setChecked(false);
- radioMediaFile.setChecked(true);
- }
+ boolean hasDownloadUrl = hasMedia && item.getMedia().getDownload_url() != null;
+ radioMediaFileUrl.setVisibility(hasDownloadUrl ? View.VISIBLE : View.GONE);
+
+ String option = prefs.getString(PREF_SHARE_DIALOG_OPTION, PREF_VALUE_WEBSITE);
+ if (option.equals(PREF_VALUE_WEBSITE)) {
+ radioEpisodeWebsite.setChecked(true);
+ radioMediaFileUrl.setChecked(false);
+ } else {
+ radioEpisodeWebsite.setChecked(false);
+ radioMediaFileUrl.setChecked(true);
}
+ radioMediaFile.setChecked(false);
boolean switchIsChecked = prefs.getBoolean(PREF_SHARE_EPISODE_START_AT, false);
checkBoxStartAt.setChecked(switchIsChecked);
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
index 3056f8955..caf489569 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
@@ -35,6 +35,9 @@ import de.danoeh.antennapod.discovery.FyydPodcastSearcher;
import de.danoeh.antennapod.discovery.ItunesPodcastSearcher;
import de.danoeh.antennapod.discovery.PodcastIndexPodcastSearcher;
import de.danoeh.antennapod.fragment.gpodnet.GpodnetMainFragment;
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
import java.util.Collections;
@@ -158,31 +161,37 @@ public class AddFeedFragment extends Fragment {
intent.setData(uri);
startActivity(intent);
} else if (requestCode == REQUEST_CODE_ADD_LOCAL_FOLDER) {
- addLocalFolder(uri);
+ Observable.fromCallable(() -> addLocalFolder(uri))
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ feed -> {
+ Fragment fragment = FeedItemlistFragment.newInstance(feed.getId());
+ ((MainActivity) getActivity()).loadChildFragment(fragment);
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ ((MainActivity) getActivity())
+ .showSnackbarAbovePlayer(error.getLocalizedMessage(), Snackbar.LENGTH_LONG);
+ });
}
}
- private void addLocalFolder(Uri uri) {
+ private Feed addLocalFolder(Uri uri) throws DownloadRequestException {
if (Build.VERSION.SDK_INT < 21) {
- return;
+ return null;
}
- try {
- 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");
- }
- Feed dirFeed = new Feed(Feed.PREFIX_LOCAL_FOLDER + uri.toString(), null, documentFile.getName());
- dirFeed.setDescription(getString(R.string.local_feed_description));
- dirFeed.setItems(Collections.emptyList());
- dirFeed.setSortOrder(SortOrder.EPISODE_TITLE_A_Z);
- DBTasks.forceRefreshFeed(getContext(), dirFeed, true);
- ((MainActivity) getActivity())
- .showSnackbarAbovePlayer(R.string.add_local_folder_success, Snackbar.LENGTH_SHORT);
- } catch (DownloadRequestException | IllegalArgumentException e) {
- Log.e(TAG, Log.getStackTraceString(e));
- ((MainActivity) getActivity()).showSnackbarAbovePlayer(e.getLocalizedMessage(), Snackbar.LENGTH_LONG);
+ 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");
}
+ Feed dirFeed = new Feed(Feed.PREFIX_LOCAL_FOLDER + uri.toString(), null, documentFile.getName());
+ dirFeed.setDescription(getString(R.string.local_feed_description));
+ 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;
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java
index 674ee5757..4ca08cbdd 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java
@@ -356,7 +356,7 @@ public class FeedInfoFragment extends Fragment implements Toolbar.OnMenuItemClic
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
() -> ((MainActivity) getActivity())
- .showSnackbarAbovePlayer(R.string.add_local_folder_success, Snackbar.LENGTH_SHORT),
+ .showSnackbarAbovePlayer(android.R.string.ok, Snackbar.LENGTH_SHORT),
error -> ((MainActivity) getActivity())
.showSnackbarAbovePlayer(error.getLocalizedMessage(), Snackbar.LENGTH_LONG));
}
diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
index 7604b94d6..3d8f3fe09 100644
--- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
@@ -78,7 +78,7 @@ public class FeedItemMenuHandler {
setItemVisibility(menu, R.id.reset_position, false);
}
- if(!UserPreferences.isEnableAutodownload() || fileDownloaded) {
+ if (!UserPreferences.isEnableAutodownload() || fileDownloaded || selectedItem.getFeed().isLocalFeed()) {
setItemVisibility(menu, R.id.activate_auto_download, false);
setItemVisibility(menu, R.id.deactivate_auto_download, false);
} else if (selectedItem.getAutoDownload()) {
diff --git a/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java b/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java
index 89d9e26c7..eaad11d1a 100644
--- a/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java
@@ -3,7 +3,9 @@ package de.danoeh.antennapod.view;
import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.drawable.Drawable;
+import android.view.Gravity;
import android.widget.AbsListView;
+import android.widget.FrameLayout;
import android.widget.ListAdapter;
import androidx.annotation.AttrRes;
import androidx.core.content.ContextCompat;
@@ -21,7 +23,7 @@ public class EmptyViewHandler {
private boolean layoutAdded = false;
private View list;
private ListAdapter listAdapter;
- private RecyclerView.Adapter recyclerAdapter;
+ private RecyclerView.Adapter<?> recyclerAdapter;
private final Context context;
private final View emptyView;
@@ -92,12 +94,19 @@ public class EmptyViewHandler {
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
emptyView.setLayoutParams(layoutParams);
break;
+ } else if (parent instanceof FrameLayout) {
+ parent.addView(emptyView);
+ FrameLayout.LayoutParams layoutParams =
+ (FrameLayout.LayoutParams) emptyView.getLayoutParams();
+ layoutParams.gravity = Gravity.CENTER;
+ emptyView.setLayoutParams(layoutParams);
+ break;
}
parent = (ViewGroup) parent.getParent();
}
}
- public void updateAdapter(RecyclerView.Adapter adapter) {
+ public void updateAdapter(RecyclerView.Adapter<?> adapter) {
if (this.recyclerAdapter != null) {
this.recyclerAdapter.unregisterAdapterDataObserver(adapterObserver);
}
diff --git a/app/src/main/res/layout/share_episode_dialog.xml b/app/src/main/res/layout/share_episode_dialog.xml
index 8cf955d4c..539efa5c8 100644
--- a/app/src/main/res/layout/share_episode_dialog.xml
+++ b/app/src/main/res/layout/share_episode_dialog.xml
@@ -13,17 +13,22 @@
android:layout_marginBottom="16dp"
android:orientation="vertical">
- <RadioButton android:id="@+id/share_episode_website_radio"
+ <RadioButton
+ android:id="@+id/share_episode_website_radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/share_dialog_episode_website_label"
- android:checked="true"
- />
- <RadioButton android:id="@+id/share_media_file_radio"
+ android:checked="true" />
+ <RadioButton
+ android:id="@+id/share_media_file_url_radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:text="@string/share_dialog_media_file_label"
- />
+ android:text="@string/share_dialog_media_file_url_label" />
+ <RadioButton
+ android:id="@+id/share_media_file_radio"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/share_dialog_media_file_label" />
</RadioGroup>
<TextView
diff --git a/app/src/main/res/menu/feeditemlist_context.xml b/app/src/main/res/menu/feeditemlist_context.xml
index 6e4966206..84e45d4c9 100644
--- a/app/src/main/res/menu/feeditemlist_context.xml
+++ b/app/src/main/res/menu/feeditemlist_context.xml
@@ -64,28 +64,5 @@
<item
android:id="@+id/share_item"
android:menuCategory="container"
- android:title="@string/share_label">
- <menu>
- <item
- android:id="@+id/share_link_item"
- android:menuCategory="container"
- android:title="@string/share_link_label" />
- <item
- android:id="@+id/share_link_with_position_item"
- android:menuCategory="container"
- android:title="@string/share_link_with_position_label" />
- <item
- android:id="@+id/share_download_url_item"
- android:menuCategory="container"
- android:title="@string/share_item_url_label" />
- <item
- android:id="@+id/share_download_url_with_position_item"
- android:menuCategory="container"
- android:title="@string/share_item_url_with_position_label" />
- <item
- android:id="@+id/share_file"
- android:menuCategory="container"
- android:title="@string/share_file_label" />
- </menu>
- </item>
+ android:title="@string/share_label" />
</menu> \ No newline at end of file