updating ShareDialog according to code review
This commit is contained in:
parent
5363b09f00
commit
61df26aacd
@ -1,18 +1,27 @@
|
||||
package de.test.antennapod.ui;
|
||||
package de.test.antennapod.dialogs;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.view.View;
|
||||
import androidx.test.espresso.Espresso;
|
||||
import androidx.test.espresso.contrib.RecyclerViewActions;
|
||||
import androidx.test.espresso.intent.rule.IntentsTestRule;
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
import de.danoeh.antennapod.fragment.AddFeedFragment;
|
||||
import de.danoeh.antennapod.fragment.DownloadsFragment;
|
||||
import de.danoeh.antennapod.fragment.EpisodesFragment;
|
||||
import de.danoeh.antennapod.fragment.QueueFragment;
|
||||
import de.danoeh.antennapod.fragment.SubscriptionFragment;
|
||||
import de.test.antennapod.EspressoTestUtils;
|
||||
import de.test.antennapod.ui.UITestUtils;
|
||||
|
||||
import org.awaitility.Awaitility;
|
||||
import org.hamcrest.Matcher;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Before;
|
||||
@ -20,6 +29,10 @@ import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static androidx.test.espresso.Espresso.onView;
|
||||
import static androidx.test.espresso.action.ViewActions.clearText;
|
||||
import static androidx.test.espresso.action.ViewActions.click;
|
||||
@ -27,7 +40,9 @@ import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
|
||||
import static androidx.test.espresso.action.ViewActions.scrollTo;
|
||||
import static androidx.test.espresso.action.ViewActions.typeText;
|
||||
import static androidx.test.espresso.assertion.ViewAssertions.matches;
|
||||
import static androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition;
|
||||
import static androidx.test.espresso.matcher.RootMatchers.isDialog;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.hasMinimumChildCount;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.isRoot;
|
||||
@ -35,6 +50,9 @@ import static androidx.test.espresso.matcher.ViewMatchers.withClassName;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
||||
import static de.test.antennapod.EspressoTestUtils.clickChildViewWithId;
|
||||
import static de.test.antennapod.EspressoTestUtils.onDrawerItem;
|
||||
import static de.test.antennapod.EspressoTestUtils.openNavDrawer;
|
||||
import static de.test.antennapod.EspressoTestUtils.waitForView;
|
||||
import static de.test.antennapod.NthMatcher.first;
|
||||
import static org.hamcrest.CoreMatchers.allOf;
|
||||
@ -44,55 +62,55 @@ import static org.hamcrest.CoreMatchers.endsWith;
|
||||
* User interface tests for queue fragment.
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class DialogsTest {
|
||||
public class ShareDialogTest {
|
||||
|
||||
@Rule
|
||||
public IntentsTestRule<MainActivity> activityRule = new IntentsTestRule<>(MainActivity.class, false, false);
|
||||
|
||||
private UITestUtils uiTestUtils;
|
||||
protected Context context;
|
||||
|
||||
@Before
|
||||
public void setUp() throws InterruptedException {
|
||||
public void setUp() throws Exception {
|
||||
context = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
EspressoTestUtils.clearPreferences();
|
||||
EspressoTestUtils.clearDatabase();
|
||||
EspressoTestUtils.setLastNavFragment(AddFeedFragment.TAG);
|
||||
EspressoTestUtils.setLastNavFragment(EpisodesFragment.TAG);
|
||||
uiTestUtils = new UITestUtils(context);
|
||||
uiTestUtils.setup();
|
||||
uiTestUtils.addLocalFeedData(true);
|
||||
|
||||
activityRule.launchActivity(new Intent());
|
||||
|
||||
String url = "https://omny.fm/shows/silence-is-not-an-option/why-not-being-racist-is-not-enough";
|
||||
openNavDrawer();
|
||||
onDrawerItem(withText(R.string.episodes_label)).perform(click());
|
||||
onView(isRoot()).perform(waitForView(withText(R.string.all_episodes_short_label), 1000));
|
||||
onView(withText(R.string.all_episodes_short_label)).perform(click());
|
||||
|
||||
onView(withId(R.id.btn_add_via_url)).perform(scrollTo()).perform(click());
|
||||
onView(withId(R.id.text)).perform(clearText(), typeText(url));
|
||||
onView(withText(R.string.confirm_label)).inRoot(isDialog())
|
||||
.check(matches(isDisplayed()))
|
||||
.perform(closeSoftKeyboard())
|
||||
.perform(scrollTo())
|
||||
.perform(click());
|
||||
Thread.sleep(5000);
|
||||
onView(withId(R.id.butSubscribe)).perform(click());
|
||||
Thread.sleep(5000);
|
||||
onView(withId(R.id.recyclerView))
|
||||
.perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
|
||||
Thread.sleep(3000);
|
||||
final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(0, 10);
|
||||
Matcher<View> allEpisodesMatcher = Matchers.allOf(withId(android.R.id.list), isDisplayed(), hasMinimumChildCount(2));
|
||||
onView(isRoot()).perform(waitForView(allEpisodesMatcher, 1000));
|
||||
onView(allEpisodesMatcher).perform(actionOnItemAtPosition(0, click()));
|
||||
onView(first(EspressoTestUtils.actionBarOverflow())).perform(click());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShareDialogDisplayed() {
|
||||
onView(withText(R.string.share_label)).perform(scrollTo()).perform(click());
|
||||
onView(allOf(isDisplayed(), withText(R.string.share_episode_label)));
|
||||
public void testShareDialogDisplayed() throws InterruptedException {
|
||||
onView(withText(R.string.share_label)).perform(click());
|
||||
onView(allOf(isDisplayed(), withText(R.string.share_label)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShareDialogShareButton() throws InterruptedException {
|
||||
onView(withText(R.string.share_label)).perform(scrollTo()).perform(click());
|
||||
onView(allOf(isDisplayed(), withText(R.string.share_label)));
|
||||
Thread.sleep(1000);
|
||||
onView(withText(R.string.share_episode_positive_label_button)).perform(scrollTo()).perform(click());
|
||||
Thread.sleep(2000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShareDialogCancelButton() {
|
||||
onView(withText(R.string.share_label)).perform(scrollTo()).perform(click());
|
||||
onView(withText(R.string.cancel_label)).check(matches(isDisplayed()));
|
||||
onView(withText(R.string.cancel_label)).check(matches(isDisplayed())).perform(scrollTo()).perform(click());
|
||||
}
|
||||
|
||||
}
|
@ -391,8 +391,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
||||
break;
|
||||
case R.id.share_item:
|
||||
if (feedItem != null) {
|
||||
new ShareDialog(this, feedItem)
|
||||
.show(((AppCompatActivity) this).getSupportFragmentManager(), "ShareEpisodeDialog");
|
||||
new ShareDialog(this, feedItem).show(getSupportFragmentManager(), "ShareEpisodeDialog");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -27,6 +27,10 @@ public class ShareDialog extends DialogFragment {
|
||||
private final 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_EPISODE_START_AT = "prefShareEpisodeStartAt";
|
||||
|
||||
private RadioGroup radioGroup;
|
||||
private RadioButton radioEpisodeWebsite;
|
||||
private RadioButton radioMediaFile;
|
||||
@ -36,7 +40,7 @@ public class ShareDialog extends DialogFragment {
|
||||
public ShareDialog(Context ctx, FeedItem item) {
|
||||
this.ctx = ctx;
|
||||
this.item = item;
|
||||
prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
|
||||
prefs = ctx.getSharedPreferences("SHARE_DIALOG_PREFS", Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@ -44,7 +48,7 @@ public class ShareDialog extends DialogFragment {
|
||||
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
|
||||
View content = View.inflate(ctx, R.layout.share_episode_dialog, null);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
|
||||
builder.setTitle(R.string.share_episode_label);
|
||||
builder.setTitle(R.string.share_label);
|
||||
builder.setView(content);
|
||||
|
||||
radioGroup = content.findViewById(R.id.share_dialog_radio_group);
|
||||
@ -59,25 +63,17 @@ public class ShareDialog extends DialogFragment {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
if (radioEpisodeWebsite.isChecked()) {
|
||||
if (switchStartAt.isChecked()) {
|
||||
ShareUtils.shareFeedItemLink(ctx, item, true);
|
||||
prefs.edit().putBoolean(UserPreferences.PREF_SHARE_EPISODE_START_AT, true).apply();
|
||||
} else {
|
||||
ShareUtils.shareFeedItemLink(ctx, item);
|
||||
prefs.edit().putBoolean(UserPreferences.PREF_SHARE_EPISODE_START_AT, false).apply();
|
||||
}
|
||||
prefs.edit().putBoolean(UserPreferences.PREF_SHARE_EPISODE_WEBSITE, true).apply();
|
||||
prefs.edit().putBoolean(UserPreferences.PREF_SHARE_EPISODE_MEDIA, false).apply();
|
||||
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 {
|
||||
if (switchStartAt.isChecked()) {
|
||||
ShareUtils.shareFeedItemDownloadLink(ctx, item, true);
|
||||
prefs.edit().putBoolean(UserPreferences.PREF_SHARE_EPISODE_START_AT, true).apply();
|
||||
} else {
|
||||
ShareUtils.shareFeedItemDownloadLink(ctx, item);
|
||||
prefs.edit().putBoolean(UserPreferences.PREF_SHARE_EPISODE_START_AT, false).apply();
|
||||
}
|
||||
prefs.edit().putBoolean(UserPreferences.PREF_SHARE_EPISODE_MEDIA, true).apply();
|
||||
prefs.edit().putBoolean(UserPreferences.PREF_SHARE_EPISODE_WEBSITE, false).apply();
|
||||
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();
|
||||
}
|
||||
}
|
||||
})
|
||||
@ -103,10 +99,10 @@ public class ShareDialog extends DialogFragment {
|
||||
}
|
||||
|
||||
if (radioEpisodeWebsite.getVisibility() == View.VISIBLE && radioMediaFile.getVisibility() == View.VISIBLE) {
|
||||
boolean radioEpisodeWebsiteIsChecked = prefs.getBoolean(UserPreferences.PREF_SHARE_EPISODE_WEBSITE, false);
|
||||
boolean radioEpisodeWebsiteIsChecked = prefs.getBoolean(PREF_SHARE_EPISODE_WEBSITE, false);
|
||||
radioEpisodeWebsite.setChecked(radioEpisodeWebsiteIsChecked);
|
||||
|
||||
boolean radioMediaIsChecked = prefs.getBoolean(UserPreferences.PREF_SHARE_EPISODE_MEDIA, false);
|
||||
boolean radioMediaIsChecked = prefs.getBoolean(PREF_SHARE_EPISODE_MEDIA, false);
|
||||
radioMediaFile.setChecked(radioMediaIsChecked);
|
||||
|
||||
if (!radioEpisodeWebsiteIsChecked && !radioMediaIsChecked) {
|
||||
@ -115,7 +111,7 @@ public class ShareDialog extends DialogFragment {
|
||||
}
|
||||
}
|
||||
|
||||
boolean switchIsChecked = prefs.getBoolean(UserPreferences.PREF_SHARE_EPISODE_START_AT, false);
|
||||
boolean switchIsChecked = prefs.getBoolean(PREF_SHARE_EPISODE_START_AT, false);
|
||||
switchStartAt.setChecked(switchIsChecked);
|
||||
}
|
||||
}
|
||||
|
@ -237,7 +237,7 @@ public class FeedItemMenuHandler {
|
||||
break;
|
||||
case R.id.share_item:
|
||||
new ShareDialog(context, selectedItem)
|
||||
.show(((AppCompatActivity) context).getSupportFragmentManager(), "ShareEpisodeDialog");
|
||||
.show((fragment.getActivity().getSupportFragmentManager()), "ShareEpisodeDialog");
|
||||
break;
|
||||
default:
|
||||
Log.d(TAG, "Unknown menuItemId: " + menuItemId);
|
||||
|
@ -35,6 +35,6 @@
|
||||
android:id="@+id/share_start_at_timer_dialog"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/share_start_at_timer_dialog_label" />
|
||||
android:text="@string/share_playback_position_dialog_label" />
|
||||
|
||||
</LinearLayout>
|
@ -112,11 +112,6 @@ public class UserPreferences {
|
||||
public static final String PREF_IMAGE_CACHE_SIZE = "prefImageCacheSize";
|
||||
public static final String PREF_DELETE_REMOVES_FROM_QUEUE = "prefDeleteRemovesFromQueue";
|
||||
|
||||
// Dialogs
|
||||
public static final String PREF_SHARE_EPISODE_WEBSITE = "prefShareEpisodeWebsite";
|
||||
public static final String PREF_SHARE_EPISODE_MEDIA = "prefShareEpisodeMedia";
|
||||
public static final String PREF_SHARE_EPISODE_START_AT = "prefShareEpisodeStartAt";
|
||||
|
||||
// Mediaplayer
|
||||
public static final String PREF_MEDIA_PLAYER = "prefMediaPlayer";
|
||||
public static final String PREF_MEDIA_PLAYER_EXOPLAYER = "exoplayer";
|
||||
|
@ -766,10 +766,9 @@
|
||||
<string name="rating_now_label">Sure, let\'s do this!</string>
|
||||
|
||||
<!-- Share episode dialog -->
|
||||
<string name="share_episode_label">Share…</string>
|
||||
<string name="share_episode_positive_label_button">Share</string>
|
||||
<string name="share_dialog_include_label">Include:</string>
|
||||
<string name="share_start_at_timer_dialog_label">Start at (timer)</string>
|
||||
<string name="share_playback_position_dialog_label">Playback position</string>
|
||||
<string name="share_dialog_media_file_label">Media file URL</string>
|
||||
<string name="share_dialog_episode_website_label">Episode website</string>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user