[MediaWiki-commits] [Gerrit] Add Retrofit service cache - change (apps...wikipedia)

2016-06-20 Thread jenkins-bot (Code Review)
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)

2016-06-14 Thread Niedzielski (Code Review)
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);
+}
+
+