diff options
author | H. Lehmann <ByteHamster@users.noreply.github.com> | 2020-07-11 17:50:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-11 17:50:00 +0200 |
commit | d110b1818bbfb0bbc9677b9fc44860c2a1a870ea (patch) | |
tree | 04e2e79a44af02bdf8808fa60a57f27a5e025fbb /app/src/main/java/de/danoeh | |
parent | c353cf79ec67be8d6404193ceb9d0af3eceee84c (diff) | |
parent | 9d2c2d8f370af84922f8197e252ee4474d0c3acb (diff) | |
download | AntennaPod-d110b1818bbfb0bbc9677b9fc44860c2a1a870ea.zip |
Merge pull request #4260 from gerardolgvr/replace-share-menu-by-dialog
fixes #1215 replacing share menu by dialog
Diffstat (limited to 'app/src/main/java/de/danoeh')
3 files changed, 143 insertions, 66 deletions
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 34c7e3aba..886835095 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -18,16 +18,23 @@ import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast; + +import com.bumptech.glide.Glide; + +import org.apache.commons.lang3.StringUtils; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.text.NumberFormat; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; -import androidx.arch.core.util.Function; +import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityOptionsCompat; import androidx.core.content.ContextCompat; -import androidx.core.util.Consumer; -import androidx.core.util.Supplier; -import com.bumptech.glide.Glide; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.event.PlaybackPositionEvent; import de.danoeh.antennapod.core.feed.FeedItem; @@ -39,7 +46,6 @@ import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.FeedItemUtil; -import de.danoeh.antennapod.core.util.Flavors; import de.danoeh.antennapod.core.util.IntentUtils; import de.danoeh.antennapod.core.util.ShareUtils; import de.danoeh.antennapod.core.util.StorageUtils; @@ -51,18 +57,13 @@ import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackController; import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter; import de.danoeh.antennapod.dialog.PlaybackControlsDialog; +import de.danoeh.antennapod.dialog.ShareDialog; import de.danoeh.antennapod.dialog.SkipPreferenceDialog; import de.danoeh.antennapod.dialog.SleepTimerDialog; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; -import org.apache.commons.lang3.StringUtils; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.text.NumberFormat; /** @@ -313,13 +314,8 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements boolean isItemAndHasLink = isFeedMedia && ShareUtils.hasLinkToShare(((FeedMedia) media).getItem()); - menu.findItem(R.id.share_link_item).setVisible(isItemAndHasLink); - menu.findItem(R.id.share_link_with_position_item).setVisible(isItemAndHasLink); boolean isItemHasDownloadLink = isFeedMedia && ((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_file).setVisible(isFeedMedia && ((FeedMedia) media).fileExists()); menu.findItem(R.id.share_item).setVisible(hasWebsiteLink || isItemAndHasLink || isItemHasDownloadLink); @@ -393,29 +389,10 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements case R.id.visit_website_item: IntentUtils.openInBrowser(MediaplayerActivity.this, getWebsiteLinkWithFallback(media)); break; - case R.id.share_link_item: - if (feedItem != null) { - ShareUtils.shareFeedItemLink(this, feedItem); - } - break; - case R.id.share_download_url_item: - if (feedItem != null) { - ShareUtils.shareFeedItemDownloadLink(this, feedItem); - } - break; - case R.id.share_link_with_position_item: + case R.id.share_item: if (feedItem != null) { - ShareUtils.shareFeedItemLink(this, feedItem, true); - } - break; - case R.id.share_download_url_with_position_item: - if (feedItem != null) { - ShareUtils.shareFeedItemDownloadLink(this, feedItem, true); - } - break; - case R.id.share_file: - if (media instanceof FeedMedia) { - ShareUtils.shareFeedItemFile(this, ((FeedMedia) media)); + ShareDialog shareDialog = ShareDialog.newInstance(feedItem); + shareDialog.show(getSupportFragmentManager(), "ShareEpisodeDialog"); } break; default: diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java new file mode 100644 index 000000000..bb2d34ac0 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java @@ -0,0 +1,120 @@ +package de.danoeh.antennapod.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.View; +import android.widget.CheckBox; +import android.widget.RadioButton; +import android.widget.RadioGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; +import de.danoeh.antennapod.R; +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 TAG = "ShareDialog"; + private Context ctx; + private FeedItem item; + + 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 radioMediaFile; + private CheckBox checkBoxStartAt; + private SharedPreferences prefs; + + public ShareDialog() { + // Empty constructor required for DialogFragment + } + + public static ShareDialog newInstance(FeedItem item) { + Bundle arguments = new Bundle(); + arguments.putSerializable(ARGUMENT_FEED_ITEM, item); + ShareDialog dialog = new ShareDialog(); + dialog.setArguments(arguments); + return dialog; + } + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + if (getArguments() != null) { + ctx = getActivity(); + item = (FeedItem) getArguments().getSerializable(ARGUMENT_FEED_ITEM); + prefs = getActivity().getSharedPreferences("ShareDialog", Context.MODE_PRIVATE); + } + + View content = View.inflate(ctx, R.layout.share_episode_dialog, null); + AlertDialog.Builder builder = new AlertDialog.Builder(ctx); + builder.setTitle(R.string.share_label); + builder.setView(content); + + radioGroup = content.findViewById(R.id.share_dialog_radio_group); + radioEpisodeWebsite = content.findViewById(R.id.share_episode_website_radio); + radioMediaFile = content.findViewById(R.id.share_media_file_radio); + checkBoxStartAt = content.findViewById(R.id.share_start_at_timer_dialog); + + setupOptions(); + + builder.setPositiveButton(R.string.share_label, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + boolean includePlaybackPosition = checkBoxStartAt.isChecked(); + if (radioEpisodeWebsite.isChecked()) { + ShareUtils.shareFeedItemLink(ctx, item, includePlaybackPosition); + prefs.edit().putString(PREF_SHARE_DIALOG_OPTION, "website").apply(); + } else { + ShareUtils.shareFeedItemDownloadLink(ctx, item, includePlaybackPosition); + prefs.edit().putString(PREF_SHARE_DIALOG_OPTION, "media").apply(); + } + prefs.edit().putBoolean(PREF_SHARE_EPISODE_START_AT, includePlaybackPosition).apply(); + } + }).setNegativeButton(R.string.cancel_label, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.dismiss(); + } + }); + + return builder.create(); + } + + private void setupOptions() { + final boolean hasMedia = item.getMedia() != null; + + if (!ShareUtils.hasLinkToShare(item)) { + radioEpisodeWebsite.setVisibility(View.GONE); + radioMediaFile.setChecked(true); + } + + if (!hasMedia || item.getMedia().getDownload_url() == null) { + radioMediaFile.setVisibility(View.GONE); + radioEpisodeWebsite.setChecked(true); + } + + 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 switchIsChecked = prefs.getBoolean(PREF_SHARE_EPISODE_START_AT, false); + checkBoxStartAt.setChecked(switchIsChecked); + } +} 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 1f15f66ec..bddafb75e 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -2,13 +2,14 @@ package de.danoeh.antennapod.menuhandler; import android.content.Context; import android.os.Handler; -import androidx.annotation.NonNull; -import com.google.android.material.snackbar.Snackbar; -import androidx.fragment.app.Fragment; import android.util.Log; import android.view.Menu; import android.view.MenuItem; +import com.google.android.material.snackbar.Snackbar; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.feed.FeedItem; @@ -23,6 +24,7 @@ import de.danoeh.antennapod.core.sync.model.EpisodeAction; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.IntentUtils; import de.danoeh.antennapod.core.util.ShareUtils; +import de.danoeh.antennapod.dialog.ShareDialog; /** * Handles interactions with the FeedItemMenu. @@ -61,20 +63,9 @@ public class FeedItemMenuHandler { } if (!ShareUtils.hasLinkToShare(selectedItem)) { setItemVisibility(menu, R.id.visit_website_item, false); - setItemVisibility(menu, R.id.share_link_item, false); - setItemVisibility(menu, R.id.share_link_with_position_item, false); - } - if (!hasMedia || selectedItem.getMedia().getDownload_url() == null) { - setItemVisibility(menu, R.id.share_download_url_item, false); - setItemVisibility(menu, R.id.share_download_url_with_position_item, false); - } - if(!hasMedia || selectedItem.getMedia().getPosition() <= 0) { - setItemVisibility(menu, R.id.share_download_url_with_position_item, false); - setItemVisibility(menu, R.id.share_link_with_position_item, false); } boolean fileDownloaded = hasMedia && selectedItem.getMedia().fileExists(); - setItemVisibility(menu, R.id.share_file, fileDownloaded); setItemVisibility(menu, R.id.remove_new_flag_item, selectedItem.isNew()); if (selectedItem.isPlayed()) { @@ -243,20 +234,9 @@ public class FeedItemMenuHandler { case R.id.visit_website_item: IntentUtils.openInBrowser(context, FeedItemUtil.getLinkWithFallback(selectedItem)); break; - case R.id.share_link_item: - ShareUtils.shareFeedItemLink(context, selectedItem); - break; - case R.id.share_download_url_item: - ShareUtils.shareFeedItemDownloadLink(context, selectedItem); - break; - case R.id.share_link_with_position_item: - ShareUtils.shareFeedItemLink(context, selectedItem, true); - break; - case R.id.share_download_url_with_position_item: - ShareUtils.shareFeedItemDownloadLink(context, selectedItem, true); - break; - case R.id.share_file: - ShareUtils.shareFeedItemFile(context, selectedItem.getMedia()); + case R.id.share_item: + ShareDialog shareDialog = ShareDialog.newInstance(selectedItem); + shareDialog.show((fragment.getActivity().getSupportFragmentManager()), "ShareEpisodeDialog"); break; default: Log.d(TAG, "Unknown menuItemId: " + menuItemId); |