From df19ca27410f35e65b51a7648ff64212499a2aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerardo=20V=C3=A1zquez?= Date: Fri, 10 Jul 2020 00:57:18 -0500 Subject: updates for share dialog and implementing new instance pattern --- .../test/antennapod/dialogs/ShareDialogTest.java | 4 +- .../antennapod/activity/MediaplayerActivity.java | 3 +- .../de/danoeh/antennapod/dialog/ShareDialog.java | 96 +++++++++++----------- .../menuhandler/FeedItemMenuHandler.java | 5 +- app/src/main/res/layout/share_episode_dialog.xml | 6 +- app/src/main/res/menu/feedlist.xml | 2 +- .../de/danoeh/antennapod/core/feed/FeedItem.java | 3 +- core/src/main/res/values/strings.xml | 1 + 8 files changed, 62 insertions(+), 58 deletions(-) diff --git a/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java b/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java index 1aecfb8db..d3a72f366 100644 --- a/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java +++ b/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java @@ -4,10 +4,8 @@ import android.content.Context; import android.content.Intent; import android.view.View; -import org.hamcrest.Description; import org.hamcrest.Matcher; import org.hamcrest.Matchers; -import org.hamcrest.TypeSafeMatcher; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -43,7 +41,7 @@ import static de.test.antennapod.NthMatcher.first; import static org.hamcrest.CoreMatchers.allOf; /** - * User interface tests for queue fragment. + * User interface tests for share dialog. */ @RunWith(AndroidJUnit4.class) public class ShareDialogTest { 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 14c113d9f..886835095 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -391,7 +391,8 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements break; case R.id.share_item: if (feedItem != null) { - new ShareDialog(this, feedItem).show(getSupportFragmentManager(), "ShareEpisodeDialog"); + 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 index af602fbf2..be6b23527 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java @@ -5,12 +5,10 @@ import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; -import android.preference.PreferenceManager; import android.view.View; +import android.widget.CheckBox; import android.widget.RadioButton; import android.widget.RadioGroup; -import android.widget.Switch; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -18,34 +16,46 @@ 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.preferences.UserPreferences; 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 final Context ctx; + private Context ctx; private FeedItem item; - private static final String PREF_SHARE_EPISODE_WEBSITE = "prefShareEpisodeWebsite"; - private static final String PREF_SHARE_EPISODE_MEDIA = "prefShareEpisodeMedia"; + 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 Switch switchStartAt; + private CheckBox checkBoxStartAt; private SharedPreferences prefs; - public ShareDialog(Context ctx, FeedItem item) { - this.ctx = ctx; - this.item = item; - prefs = ctx.getSharedPreferences("SHARE_DIALOG_PREFS", Context.MODE_PRIVATE); + 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); @@ -54,34 +64,30 @@ public class ShareDialog extends DialogFragment { 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); - switchStartAt = content.findViewById(R.id.share_start_at_timer_dialog); + 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) { - if (radioEpisodeWebsite.isChecked()) { - ShareUtils.shareFeedItemLink(ctx, item, switchStartAt.isChecked()); - prefs.edit().putBoolean(PREF_SHARE_EPISODE_START_AT, switchStartAt.isChecked()).apply(); - - prefs.edit().putBoolean(PREF_SHARE_EPISODE_WEBSITE, true).apply(); - prefs.edit().putBoolean(PREF_SHARE_EPISODE_MEDIA, false).apply(); - } else { - ShareUtils.shareFeedItemLink(ctx, item, switchStartAt.isChecked()); - prefs.edit().putBoolean(PREF_SHARE_EPISODE_START_AT, switchStartAt.isChecked()).apply(); - - prefs.edit().putBoolean(PREF_SHARE_EPISODE_WEBSITE, false).apply(); - prefs.edit().putBoolean(PREF_SHARE_EPISODE_MEDIA, true).apply(); - } - } - }) - .setNegativeButton(R.string.cancel_label, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.dismiss(); - } - }); + 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(); } @@ -99,19 +105,17 @@ public class ShareDialog extends DialogFragment { } if (radioEpisodeWebsite.getVisibility() == View.VISIBLE && radioMediaFile.getVisibility() == View.VISIBLE) { - boolean radioEpisodeWebsiteIsChecked = prefs.getBoolean(PREF_SHARE_EPISODE_WEBSITE, false); - radioEpisodeWebsite.setChecked(radioEpisodeWebsiteIsChecked); - - boolean radioMediaIsChecked = prefs.getBoolean(PREF_SHARE_EPISODE_MEDIA, false); - radioMediaFile.setChecked(radioMediaIsChecked); - - if (!radioEpisodeWebsiteIsChecked && !radioMediaIsChecked) { - radioGroup.clearCheck(); + 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); - switchStartAt.setChecked(switchIsChecked); + 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 1eb3d3aeb..bddafb75e 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -9,7 +9,6 @@ import android.view.MenuItem; import com.google.android.material.snackbar.Snackbar; import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; @@ -236,8 +235,8 @@ public class FeedItemMenuHandler { IntentUtils.openInBrowser(context, FeedItemUtil.getLinkWithFallback(selectedItem)); break; case R.id.share_item: - new ShareDialog(context, selectedItem) - .show((fragment.getActivity().getSupportFragmentManager()), "ShareEpisodeDialog"); + ShareDialog shareDialog = ShareDialog.newInstance(selectedItem); + shareDialog.show((fragment.getActivity().getSupportFragmentManager()), "ShareEpisodeDialog"); break; default: Log.d(TAG, "Unknown menuItemId: " + menuItemId); diff --git a/app/src/main/res/layout/share_episode_dialog.xml b/app/src/main/res/layout/share_episode_dialog.xml index fc2ad5c3d..8cf955d4c 100644 --- a/app/src/main/res/layout/share_episode_dialog.xml +++ b/app/src/main/res/layout/share_episode_dialog.xml @@ -14,13 +14,13 @@ android:orientation="vertical"> @@ -31,7 +31,7 @@ android:layout_height="match_parent" android:text="@string/share_dialog_include_label"/> - + android:title="@string/share_label_with_ellipses"> Rename podcast Remove podcast Share + Share… Share Episode URL Share Episode URL with Position Share File -- cgit v1.2.3