[MediaWiki-commits] [Gerrit] Add Retrofit service cache - change (apps...wikipedia)
jenkins-bot has submitted this change and it was merged. Change subject: Add Retrofit service cache .. Add Retrofit service cache • Add Retrofit service interface cache. The previous implementation in WikipediaApp did not work for multiple clients. • Move Site parameter from construction to request time. This allows localizations to change between requests. • The centralized place for generating Retrofits seems to be in *PageEndpointsCache. Expose a static method for non-page services and use it. • Rename some of the "clients" to "services" to match Retrofit terminology. Bug: T129082 Change-Id: I6413f34113b7d110202b2db9c288b6e1836c8da9 --- M app/src/main/java/org/wikipedia/WikipediaApp.java A app/src/main/java/org/wikipedia/dataclient/retrofit/CachedService.java A app/src/main/java/org/wikipedia/dataclient/retrofit/MwCachedService.java A app/src/main/java/org/wikipedia/dataclient/retrofit/RbCachedService.java A app/src/main/java/org/wikipedia/dataclient/retrofit/SiteCachedService.java M app/src/main/java/org/wikipedia/feed/FeedClient.java M app/src/main/java/org/wikipedia/feed/FeedCoordinator.java M app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java M app/src/main/java/org/wikipedia/feed/becauseyouread/BecauseYouReadClient.java M app/src/main/java/org/wikipedia/feed/continuereading/ContinueReadingClient.java M app/src/main/java/org/wikipedia/feed/demo/IntegerListClient.java M app/src/main/java/org/wikipedia/feed/mostread/MostReadClient.java M app/src/main/java/org/wikipedia/feed/searchbar/SearchClient.java M app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java M app/src/main/java/org/wikipedia/server/restbase/RbPageEndpointsCache.java M app/src/test/java/org/wikipedia/feed/mostread/MostReadClientTest.java M app/src/test/java/org/wikipedia/test/MockWebServerTest.java 17 files changed, 186 insertions(+), 65 deletions(-) Approvals: Dbrant: Looks good to me, approved jenkins-bot: Verified diff --git a/app/src/main/java/org/wikipedia/WikipediaApp.java b/app/src/main/java/org/wikipedia/WikipediaApp.java index 60d2d64..7e9ca3b 100644 --- a/app/src/main/java/org/wikipedia/WikipediaApp.java +++ b/app/src/main/java/org/wikipedia/WikipediaApp.java @@ -29,7 +29,6 @@ import org.wikipedia.database.DatabaseClient; import org.wikipedia.database.contract.AppContentProviderContract; import org.wikipedia.database.contract.ReadingListPageContract; -import org.wikipedia.dataclient.retrofit.RetrofitFactory; import org.wikipedia.editing.EditTokenStorage; import org.wikipedia.editing.summaries.EditSummary; import org.wikipedia.events.ChangeTextSizeEvent; @@ -69,7 +68,6 @@ import okhttp3.Headers; import okhttp3.Request; -import retrofit2.Retrofit; import static org.wikipedia.util.DimenUtil.getFontSizeFromSp; import static org.wikipedia.util.ReleaseUtil.getChannel; @@ -96,8 +94,6 @@ private SharedPreferenceCookieManager cookieManager; private String userAgent; private Site site; -@Nullable private Site retrofitSite; -@Nullable private Retrofit retrofit; private CrashReporter crashReporter; @@ -271,20 +267,6 @@ site = Site.forLanguageCode(lang); } return site; -} - -/** @return client if app site has not changed, a new client otherwise. */ -@NonNull public synchronized T retrofitClient(Class clazz, @Nullable T client) { -@SuppressWarnings("checkstyle:hiddenfield") Site site = getSite(); -if (!site.equals(retrofitSite)) { -retrofitSite = site; -retrofit = RetrofitFactory.newInstance(site); -return retrofit.create(clazz); -} -// getSite() returns nonnull. If retrofitSite was null, it would have been unequal and -// initialized in the preceding conditional. -//noinspection ConstantConditions -return client == null ? retrofit.create(clazz) : client; } /** diff --git a/app/src/main/java/org/wikipedia/dataclient/retrofit/CachedService.java b/app/src/main/java/org/wikipedia/dataclient/retrofit/CachedService.java new file mode 100644 index 000..57f1ea4 --- /dev/null +++ b/app/src/main/java/org/wikipedia/dataclient/retrofit/CachedService.java @@ -0,0 +1,35 @@ +package org.wikipedia.dataclient.retrofit; + +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import retrofit2.Retrofit; + +public abstract class CachedService { +@NonNull private final Class clazz; +@Nullable private Retrofit retrofit; +@Nullable private T service; + +public CachedService(@NonNull Class clazz) { +this.clazz = clazz; +} + +@Nullable protected T service() { +return service; +} + +@Nullable protected Retrofit retrofit() { +return retrofit; +} + +protected void update() { +retrofit = create(); +service = retrofit.create(clazz); +
[MediaWiki-commits] [Gerrit] Add Retrofit service cache - change (apps...wikipedia)
Niedzielski has uploaded a new change for review. https://gerrit.wikimedia.org/r/294376 Change subject: Add Retrofit service cache .. Add Retrofit service cache • Add Retrofit service interface cache. The previous implementation in WikipediaApp did not work for multiple clients. • Move Site parameter from construction to request time. This allows localizations to change between requests. • The centralized place for generating Retrofits seems to be in *PageEndpointsCache. Expose a static method for non-page services and use it. • Rename some of the "clients" to "services" to match Retrofit terminology. Bug: T129082 Change-Id: I6413f34113b7d110202b2db9c288b6e1836c8da9 --- M app/src/main/java/org/wikipedia/WikipediaApp.java A app/src/main/java/org/wikipedia/dataclient/retrofit/CachedService.java A app/src/main/java/org/wikipedia/dataclient/retrofit/CsCachedService.java A app/src/main/java/org/wikipedia/dataclient/retrofit/MwCachedService.java A app/src/main/java/org/wikipedia/dataclient/retrofit/SiteCachedService.java M app/src/main/java/org/wikipedia/feed/FeedClient.java M app/src/main/java/org/wikipedia/feed/FeedCoordinator.java M app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java M app/src/main/java/org/wikipedia/feed/becauseyouread/BecauseYouReadClient.java M app/src/main/java/org/wikipedia/feed/continuereading/ContinueReadingClient.java M app/src/main/java/org/wikipedia/feed/demo/IntegerListClient.java M app/src/main/java/org/wikipedia/feed/mostread/MostReadClient.java M app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java M app/src/main/java/org/wikipedia/server/restbase/RbPageEndpointsCache.java M app/src/test/java/org/wikipedia/feed/mostread/MostReadClientTest.java M app/src/test/java/org/wikipedia/test/MockWebServerTest.java 16 files changed, 183 insertions(+), 63 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/76/294376/1 diff --git a/app/src/main/java/org/wikipedia/WikipediaApp.java b/app/src/main/java/org/wikipedia/WikipediaApp.java index 60d2d64..7e9ca3b 100644 --- a/app/src/main/java/org/wikipedia/WikipediaApp.java +++ b/app/src/main/java/org/wikipedia/WikipediaApp.java @@ -29,7 +29,6 @@ import org.wikipedia.database.DatabaseClient; import org.wikipedia.database.contract.AppContentProviderContract; import org.wikipedia.database.contract.ReadingListPageContract; -import org.wikipedia.dataclient.retrofit.RetrofitFactory; import org.wikipedia.editing.EditTokenStorage; import org.wikipedia.editing.summaries.EditSummary; import org.wikipedia.events.ChangeTextSizeEvent; @@ -69,7 +68,6 @@ import okhttp3.Headers; import okhttp3.Request; -import retrofit2.Retrofit; import static org.wikipedia.util.DimenUtil.getFontSizeFromSp; import static org.wikipedia.util.ReleaseUtil.getChannel; @@ -96,8 +94,6 @@ private SharedPreferenceCookieManager cookieManager; private String userAgent; private Site site; -@Nullable private Site retrofitSite; -@Nullable private Retrofit retrofit; private CrashReporter crashReporter; @@ -271,20 +267,6 @@ site = Site.forLanguageCode(lang); } return site; -} - -/** @return client if app site has not changed, a new client otherwise. */ -@NonNull public synchronized T retrofitClient(Class clazz, @Nullable T client) { -@SuppressWarnings("checkstyle:hiddenfield") Site site = getSite(); -if (!site.equals(retrofitSite)) { -retrofitSite = site; -retrofit = RetrofitFactory.newInstance(site); -return retrofit.create(clazz); -} -// getSite() returns nonnull. If retrofitSite was null, it would have been unequal and -// initialized in the preceding conditional. -//noinspection ConstantConditions -return client == null ? retrofit.create(clazz) : client; } /** diff --git a/app/src/main/java/org/wikipedia/dataclient/retrofit/CachedService.java b/app/src/main/java/org/wikipedia/dataclient/retrofit/CachedService.java new file mode 100644 index 000..57f1ea4 --- /dev/null +++ b/app/src/main/java/org/wikipedia/dataclient/retrofit/CachedService.java @@ -0,0 +1,35 @@ +package org.wikipedia.dataclient.retrofit; + +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import retrofit2.Retrofit; + +public abstract class CachedService { +@NonNull private final Class clazz; +@Nullable private Retrofit retrofit; +@Nullable private T service; + +public CachedService(@NonNull Class clazz) { +this.clazz = clazz; +} + +@Nullable protected T service() { +return service; +} + +@Nullable protected Retrofit retrofit() { +return retrofit; +} + +protected void update() { +retrofit = create(); +service = retrofit.create(clazz); +} + +