jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/395602 )
Change subject: OnThisDay endpoint change ...................................................................... OnThisDay endpoint change - Deriving the response from aggregate feed response instead of a separate call. Change-Id: Iffdb689fe39bff45e436c90dac09d1a2ec62fef2 --- M app/src/main/java/org/wikipedia/feed/FeedContentType.java M app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContent.java M app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContentClient.java M app/src/main/java/org/wikipedia/feed/onthisday/OnThisDay.java M app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayCard.java D app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayClient.java M app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.java A app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFullListClient.java D app/src/test/java/org/wikipedia/feed/onthisday/OnThisDayClientTest.java 9 files changed, 78 insertions(+), 199 deletions(-) Approvals: Dbrant: Looks good to me, approved Sharvaniharan: Looks good to me, approved jenkins-bot: Verified diff --git a/app/src/main/java/org/wikipedia/feed/FeedContentType.java b/app/src/main/java/org/wikipedia/feed/FeedContentType.java index ed4f258..1055752 100644 --- a/app/src/main/java/org/wikipedia/feed/FeedContentType.java +++ b/app/src/main/java/org/wikipedia/feed/FeedContentType.java @@ -10,7 +10,6 @@ import org.wikipedia.feed.continuereading.ContinueReadingClient; import org.wikipedia.feed.dataclient.FeedClient; import org.wikipedia.feed.mainpage.MainPageClient; -import org.wikipedia.feed.onthisday.OnThisDayClient; import org.wikipedia.feed.random.RandomClient; import org.wikipedia.model.EnumCode; import org.wikipedia.model.EnumCodeMap; @@ -31,7 +30,7 @@ @Nullable @Override public FeedClient newClient(AggregatedFeedContentClient aggregatedClient, int age, boolean isOnline) { - return isEnabled() && isOnline ? new OnThisDayClient() : null; + return isEnabled() && isOnline ? new AggregatedFeedContentClient.OnThisDayFeed(aggregatedClient) : null; } }, CONTINUE_READING(2, R.string.view_continue_reading_card_title, R.string.feed_item_type_continue_reading) { diff --git a/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContent.java b/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContent.java index 0f10615..0a17056 100644 --- a/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContent.java +++ b/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContent.java @@ -8,6 +8,7 @@ import org.wikipedia.feed.image.FeaturedImage; import org.wikipedia.feed.mostread.MostReadArticles; import org.wikipedia.feed.news.NewsItem; +import org.wikipedia.feed.onthisday.OnThisDay; import java.util.List; @@ -16,6 +17,14 @@ @SuppressWarnings("unused") @Nullable private List<NewsItem> news; @SuppressWarnings("unused") @SerializedName("mostread") @Nullable private MostReadArticles mostRead; @SuppressWarnings("unused") @Nullable private FeaturedImage image; + @SuppressWarnings("unused") @Nullable private List<OnThisDay.Event> onthisday; + + + @Nullable + public List<OnThisDay.Event> onthisday() { + return onthisday; + } + @Nullable RbPageSummary tfa() { diff --git a/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContentClient.java b/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContentClient.java index dbfec05..a15db7a 100644 --- a/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContentClient.java +++ b/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContentClient.java @@ -13,6 +13,8 @@ import org.wikipedia.feed.model.UtcDate; import org.wikipedia.feed.mostread.MostReadListCard; import org.wikipedia.feed.news.NewsListCard; +import org.wikipedia.feed.onthisday.OnThisDay; +import org.wikipedia.feed.onthisday.OnThisDayCard; import org.wikipedia.settings.Prefs; import org.wikipedia.util.DateUtil; import org.wikipedia.util.log.L; @@ -35,6 +37,23 @@ @Nullable private AggregatedFeedContent aggregatedResponse; private int aggregatedResponseAge = -1; + public static class OnThisDayFeed extends BaseClient { + public OnThisDayFeed(@NonNull AggregatedFeedContentClient aggregatedClient) { + super(aggregatedClient); + } + + @Override + void getCardFromResponse(@NonNull AggregatedFeedContent content, @NonNull WikiSite wiki, + int age, @NonNull List<Card> outCards) { + if (content.onthisday() != null) { + List<OnThisDay.Event> selectedEvents = content.onthisday(); + OnThisDay onThisDay = new OnThisDay(); + onThisDay.setSelected(selectedEvents); + OnThisDayCard card = new OnThisDayCard(onThisDay, wiki, age); + outCards.add(card); + } + } + } public static class InTheNews extends BaseClient { public InTheNews(@NonNull AggregatedFeedContentClient aggregatedClient) { super(aggregatedClient); diff --git a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDay.java b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDay.java index c9dde84..7a3d255 100644 --- a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDay.java +++ b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDay.java @@ -43,7 +43,7 @@ return allEvents; } - static class Event { + public static class Event { @SuppressWarnings("unused,NullableProblems") @Required @NonNull private String text; @SuppressWarnings("unused") private int year; @SuppressWarnings("unused,NullableProblems") @Required @NonNull private List<RbPageSummary> pages; @@ -72,4 +72,9 @@ return pages; } } + + public void setSelected(@Nullable List<Event> selected) { + this.selected = selected; + } + } diff --git a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayCard.java b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayCard.java index bb265e8..5b1c11b 100644 --- a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayCard.java +++ b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayCard.java @@ -14,6 +14,7 @@ import java.util.Calendar; import java.util.List; +import java.util.Random; public class OnThisDayCard extends Card { private int nextYear; @@ -24,12 +25,13 @@ private OnThisDay.Event eventShownOnCard; private int age; - OnThisDayCard(@NonNull OnThisDay onThisDay, @NonNull OnThisDay.Event event, int nextYear, @NonNull Calendar date, @NonNull WikiSite wiki, int age) { + public OnThisDayCard(@NonNull OnThisDay onThisDay, @NonNull WikiSite wiki, int age) { super(); this.onThisDay = onThisDay; - eventShownOnCard = event; - this.date = date; - this.nextYear = nextYear; + int randomIndex = new Random().nextInt(onThisDay.selectedEvents().size() - 1); + eventShownOnCard = onThisDay.selectedEvents().get(randomIndex); + this.date = DateUtil.getDefaultDateFor(age); + this.nextYear = onThisDay.selectedEvents().get(randomIndex + 1).year(); this.wiki = wiki; this.age = age; } diff --git a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayClient.java b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayClient.java deleted file mode 100644 index 0e43382..0000000 --- a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayClient.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.wikipedia.feed.onthisday; - -import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.VisibleForTesting; - -import org.wikipedia.dataclient.WikiSite; -import org.wikipedia.dataclient.retrofit.RetrofitFactory; -import org.wikipedia.feed.dataclient.FeedClient; -import org.wikipedia.feed.model.Card; -import org.wikipedia.settings.Prefs; -import org.wikipedia.util.DateUtil; -import org.wikipedia.util.log.L; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Locale; -import java.util.Random; - -import retrofit2.Call; -import retrofit2.Response; -import retrofit2.Retrofit; -import retrofit2.http.GET; -import retrofit2.http.Path; - -public class OnThisDayClient implements FeedClient { - @Nullable private Call<OnThisDay> call; - - @Override - public void request(@NonNull Context context, @NonNull WikiSite wiki, int age, @NonNull FeedClient.Callback cb) { - Calendar today = DateUtil.getDefaultDateFor(age); - String endpoint = String.format(Locale.ROOT, Prefs.getRestbaseUriFormat(), wiki.scheme(), - wiki.authority()); - Retrofit retrofit = RetrofitFactory.newInstance(endpoint, wiki); - OnThisDayClient.Service service = retrofit.create(Service.class); - call = service.getSelectedEvent(today.get(Calendar.MONTH) + 1, today.get(Calendar.DATE)); - call.enqueue(new CallbackAdapter(cb, today, wiki, age)); - } - - public Call<OnThisDay> request(@NonNull WikiSite wiki, int month, int date) { - String endpoint = String.format(Locale.ROOT, Prefs.getRestbaseUriFormat(), wiki.scheme(), - wiki.authority()); - Retrofit retrofit = RetrofitFactory.newInstance(endpoint, wiki); - OnThisDayClient.Service service = retrofit.create(Service.class); - return service.getAllOtdEvents(month, date); - } - - @Override - public void cancel() { - if (call == null) { - return; - } - call.cancel(); - call = null; - } - - static class CallbackAdapter implements retrofit2.Callback<OnThisDay> { - @NonNull private final FeedClient.Callback cb; - private Calendar today; - private WikiSite wiki; - private int age; - - CallbackAdapter(@NonNull FeedClient.Callback cb, Calendar today, WikiSite wiki, int age) { - this.cb = cb; - this.today = today; - this.wiki = wiki; - this.age = age; - } - - @Override - public void onResponse(@NonNull Call<OnThisDay> call, - @NonNull Response<OnThisDay> response) { - List<Card> cards = new ArrayList<>(); - OnThisDay onThisDay = response.body(); - if (onThisDay == null || onThisDay.selectedEvents().size() <= 1) { - cb.error(new RuntimeException("Incorrect response format.")); - return; - } - int randomIndex = new Random().nextInt(onThisDay.selectedEvents().size() - 1); - OnThisDay.Event event = onThisDay.selectedEvents().get(randomIndex); - OnThisDayCard card = new OnThisDayCard(onThisDay, event, onThisDay.selectedEvents().get(randomIndex + 1).year(), today, wiki, age); - cards.add(card); - cb.success(cards); - } - - @Override - public void onFailure(@NonNull Call<OnThisDay> call, @NonNull Throwable caught) { - L.v(caught); - cb.error(caught); - } - } - - @VisibleForTesting - interface Service { - @NonNull - @GET("feed/onthisday/selected/{mm}/{dd}") - Call<OnThisDay> getSelectedEvent(@Path("mm") int month, - @Path("dd") int day); - - @NonNull - @GET("feed/onthisday/events/{mm}/{dd}") - Call<OnThisDay> getAllOtdEvents(@Path("mm") int month, - @Path("dd") int day); - } - - @VisibleForTesting - @NonNull - Call<OnThisDay> request(@NonNull Service service, int mon, int day) { - return service.getSelectedEvent(mon, day); - } -} diff --git a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.java b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.java index 24c6819..19fc78e 100644 --- a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.java +++ b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.java @@ -131,7 +131,7 @@ eventsRecycler.setVisibility(View.GONE); errorView.setVisibility(View.GONE); - new OnThisDayClient().request(WikipediaApp.getInstance().getWikiSite(), month + 1, date).enqueue(new Callback<OnThisDay>() { + new OnThisDayFullListClient().request(WikipediaApp.getInstance().getWikiSite(), month + 1, date).enqueue(new Callback<OnThisDay>() { @Override public void onResponse(@NonNull Call<OnThisDay> call, @NonNull Response<OnThisDay> response) { if (!isAdded()) { diff --git a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFullListClient.java b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFullListClient.java new file mode 100644 index 0000000..cdc65f4 --- /dev/null +++ b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFullListClient.java @@ -0,0 +1,36 @@ +package org.wikipedia.feed.onthisday; + +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.VisibleForTesting; + +import org.wikipedia.dataclient.WikiSite; +import org.wikipedia.dataclient.retrofit.RetrofitFactory; +import org.wikipedia.settings.Prefs; + +import java.util.Locale; + +import retrofit2.Call; +import retrofit2.Retrofit; +import retrofit2.http.GET; +import retrofit2.http.Path; + +public class OnThisDayFullListClient { + @Nullable private Call<OnThisDay> call; + + public Call<OnThisDay> request(@NonNull WikiSite wiki, int month, int date) { + String endpoint = String.format(Locale.ROOT, Prefs.getRestbaseUriFormat(), wiki.scheme(), + wiki.authority()); + Retrofit retrofit = RetrofitFactory.newInstance(endpoint, wiki); + OnThisDayFullListClient.Service service = retrofit.create(Service.class); + return service.getAllOtdEvents(month, date); + } + + @VisibleForTesting + interface Service { + @NonNull + @GET("feed/onthisday/events/{mm}/{dd}") + Call<OnThisDay> getAllOtdEvents(@Path("mm") int month, + @Path("dd") int day); + } +} diff --git a/app/src/test/java/org/wikipedia/feed/onthisday/OnThisDayClientTest.java b/app/src/test/java/org/wikipedia/feed/onthisday/OnThisDayClientTest.java deleted file mode 100644 index b12f614..0000000 --- a/app/src/test/java/org/wikipedia/feed/onthisday/OnThisDayClientTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.wikipedia.feed.onthisday; - -import android.support.annotation.NonNull; - -import org.junit.Before; -import org.junit.Test; -import org.wikipedia.feed.dataclient.FeedClient; -import org.wikipedia.feed.model.Card; -import org.wikipedia.json.GsonUnmarshaller; -import org.wikipedia.test.MockWebServerTest; -import org.wikipedia.test.TestFileUtil; - -import retrofit2.Call; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyListOf; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; - -public class OnThisDayClientTest extends MockWebServerTest { - private OnThisDay onThisDay; - private static final int MON = 10, DAY = 5; - - @NonNull private OnThisDayClient client = new OnThisDayClient(); - - @Before - @Override - public void setUp() throws Throwable { - super.setUp(); - String json = TestFileUtil.readRawFile("onthisday_02_06.json"); - onThisDay = GsonUnmarshaller.unmarshal(OnThisDay.class, json); - } - - @Test - public void testRequestSuccess() throws Throwable { - enqueueFromFile("onthisday_02_06.json"); - FeedClient.Callback cb = mock(FeedClient.Callback.class); - request(cb); - server().takeRequest(); - verify(cb).success(anyListOf(Card.class)); - verify(cb, never()).error(any(Throwable.class)); - } - - @Test - public void testRequestMalFormed() throws Throwable { - server().enqueue("Malformed."); - FeedClient.Callback cb = mock(FeedClient.Callback.class); - request(cb); - server().takeRequest(); - verify(cb, never()).success(anyListOf(Card.class)); - verify(cb).error(any(Throwable.class)); - } - - @Test - public void testRequestNotFound() throws Throwable { - enqueue404(); - FeedClient.Callback cb = mock(FeedClient.Callback.class); - request(cb); - server().takeRequest(); - verify(cb, never()).success(anyListOf(Card.class)); - verify(cb).error(any(Throwable.class)); - } - - @Test - public void testParamsNullity() throws Throwable { - OnThisDay.Event event = onThisDay.events().get(0); - assertThat((event.text() != null), is(true)); - assertThat((event.pages() != null), is(true)); - } - - private void request(@NonNull FeedClient.Callback cb) { - Call<OnThisDay> call = client.request(service(OnThisDayClient.Service.class), MON, DAY); - call.enqueue(new OnThisDayClient.CallbackAdapter(cb, null, null, 0)); - } -} -- To view, visit https://gerrit.wikimedia.org/r/395602 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Iffdb689fe39bff45e436c90dac09d1a2ec62fef2 Gerrit-PatchSet: 4 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Sharvaniharan <sha...@wikimedia.org> Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org> Gerrit-Reviewer: Cooltey <cf...@wikimedia.org> Gerrit-Reviewer: Dbrant <dbr...@wikimedia.org> Gerrit-Reviewer: Sharvaniharan <sha...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits