Niedzielski has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/217972

Change subject: Refactor accept-language header logic
......................................................................

Refactor accept-language header logic

- Move accept-language header logic from WikipediaApp to AcceptLanguageUtil.
- Add missing @NonNulls from Android Lint.
- Very minor refactor of part of getAPIForSite() into buildCustomHeaders().

Change-Id: Ibc64f1fce5308faf5bd6b30fef62ba30d3c6d1b6
---
M wikipedia/src/main/java/org/wikipedia/ThemedActionBarActivity.java
M wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
M wikipedia/src/main/java/org/wikipedia/bridge/CommunicationBridge.java
M wikipedia/src/main/java/org/wikipedia/concurrency/AsyncTask.java
M wikipedia/src/main/java/org/wikipedia/data/SQLiteContentProvider.java
M wikipedia/src/main/java/org/wikipedia/editing/richtext/ColorSpanEx.java
A wikipedia/src/main/java/org/wikipedia/interlanguage/AcceptLanguageUtil.java
M wikipedia/src/main/java/org/wikipedia/nearby/NearbyCompassView.java
M wikipedia/src/main/java/org/wikipedia/onboarding/OnboardingActivity.java
M wikipedia/src/main/java/org/wikipedia/page/LinkMovementMethodExt.java
M wikipedia/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
M 
wikipedia/src/main/java/org/wikipedia/settings/CheckBoxPreferenceMultiLine.java
M wikipedia/src/main/java/org/wikipedia/settings/PreferenceMultiLine.java
M wikipedia/src/main/java/org/wikipedia/settings/SettingsActivityGB.java
14 files changed, 91 insertions(+), 58 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/72/217972/1

diff --git a/wikipedia/src/main/java/org/wikipedia/ThemedActionBarActivity.java 
b/wikipedia/src/main/java/org/wikipedia/ThemedActionBarActivity.java
index a344b54..f1971c5 100644
--- a/wikipedia/src/main/java/org/wikipedia/ThemedActionBarActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/ThemedActionBarActivity.java
@@ -3,6 +3,7 @@
 import android.app.Activity;
 import android.os.Build;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.v7.app.AppCompatActivity;
 import android.view.KeyEvent;
 import android.view.ViewConfiguration;
@@ -57,7 +58,7 @@
     }
 
     @Override
-    public boolean onKeyUp(int keyCode, KeyEvent event) {
+    public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_MENU && 
"LGE".equalsIgnoreCase(Build.BRAND)) {
             openOptionsMenu();
             return true;
diff --git a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java 
b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
index 8b9b2d6..eaa1544 100644
--- a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
+++ b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
@@ -30,6 +30,7 @@
 import org.wikipedia.events.ThemeChangeEvent;
 import org.wikipedia.history.HistoryEntry;
 import org.wikipedia.history.HistoryEntryPersister;
+import org.wikipedia.interlanguage.AcceptLanguageUtil;
 import org.wikipedia.interlanguage.AppLanguageState;
 import org.wikipedia.login.UserInfoStorage;
 import org.wikipedia.migration.PerformMigrationsTask;
@@ -51,6 +52,8 @@
 import java.util.Random;
 import java.util.UUID;
 
+import static org.wikipedia.util.StringUtil.emptyIfNull;
+
 @ReportsCrashes(
         formKey = "",
         mode = ReportingInteractionMode.DIALOG,
@@ -67,9 +70,8 @@
     }
 
     // Reload in onCreate to override
-    private String networkProtocol = HTTPS_PROTOCOL;
     public String getNetworkProtocol() {
-        return networkProtocol;
+        return HTTPS_PROTOCOL;
     }
 
     private boolean sslFallback = false;
@@ -195,7 +197,7 @@
 
         // Enable debugging on the webview
         if (ApiUtil.hasKitKat()) {
-            WebView.setWebContentsDebuggingEnabled(true);
+            WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG);
         }
 
         Api.setConnectionFactory(new OkHttpConnectionFactory(this));
@@ -225,42 +227,21 @@
         return userAgent;
     }
 
-    @NonNull
-    public String getAcceptLanguage() {
-        return getAcceptLanguage(null);
-    }
-
     /**
      * @return the value that should go in the Accept-Language header.
      */
     @NonNull
     public String getAcceptLanguage(@Nullable Site site) {
-        /*Nonnull*/ String siteLanguageCode = site == null ? "" : 
site.getLanguageCode();
-        /*Nonnull*/ String appLanguageCode = isSystemLanguageEnabled() ? "" : 
getAppLanguageCode();
-        /*Nonnull*/ String systemLanguageCode = getSystemLanguageCode();
-        final float appLanguageQuality = .9f;
-        final float systemLanguageQuality = .8f;
-
-        String acceptLanguage = siteLanguageCode;
-        acceptLanguage = appendToAcceptLanguage(acceptLanguage, 
appLanguageCode, appLanguageQuality);
-        acceptLanguage = appendToAcceptLanguage(acceptLanguage, 
systemLanguageCode, systemLanguageQuality);
-
-        return acceptLanguage;
+        return AcceptLanguageUtil.getAcceptLanguage(
+                site == null ? "" : emptyIfNull(site.getLanguageCode()),
+                emptyIfNull(getAppLanguageCode()), 
appLanguageState.getSystemLanguageCode());
     }
 
     private HashMap<String, Api> apis = new HashMap<>();
     private MccMncStateHandler mccMncStateHandler = new MccMncStateHandler();
     public Api getAPIForSite(Site site) {
-        // 
https://lists.wikimedia.org/pipermail/wikimedia-l/2014-April/071131.html
-        HashMap<String, String> customHeaders = new HashMap<>();
-        customHeaders.put("User-Agent", getUserAgent());
-        // Add the app install ID to the header, but only if the user has not 
opted out of logging
-        if (isEventLoggingEnabled()) {
-            customHeaders.put("X-WMF-UUID", getAppInstallID());
-        }
         String acceptLanguage = getAcceptLanguage(site);
-
-        customHeaders.put("Accept-Language", acceptLanguage);
+        HashMap<String, String> customHeaders = 
buildCustomHeaders(acceptLanguage);
 
         // Because the mccMnc enrichment is a one-time thing, we don't need to 
have a complex hash key
         // for the apis HashMap<String, Api> like we do below. It naturally 
gets the correct
@@ -305,19 +286,17 @@
         return getAPIForSite(getPrimarySite());
     }
 
+    @Nullable
     public String getAppLanguageCode() {
         return appLanguageState.getAppLanguageCode();
     }
 
-    public String getSystemLanguageCode() {
-        return appLanguageState.getSystemLanguageCode();
-    }
-
+    @NonNull
     public String getAppOrSystemLanguageCode() {
         return appLanguageState.getAppOrSystemLanguageCode();
     }
 
-    public void setAppLanguageCode(String code) {
+    public void setAppLanguageCode(@Nullable String code) {
         appLanguageState.setAppLanguageCode(code);
         resetSite();
     }
@@ -330,10 +309,12 @@
         appLanguageState.setSystemLanguageEnabled();
     }
 
+    @Nullable
     public String getAppLanguageLocalizedName() {
         return appLanguageState.getAppLanguageLocalizedName();
     }
 
+    @NonNull
     public Locale getAppLocale() {
         return appLanguageState.getAppLocale();
     }
@@ -507,7 +488,6 @@
     /**
      * Sets the theme of the app. If the new theme is the same as the current 
theme, nothing happens.
      * Otherwise, an event is sent to notify of the theme change.
-     * @param newTheme
      */
     public void setCurrentTheme(int newTheme) {
         if (newTheme == currentTheme) {
@@ -591,19 +571,19 @@
         primarySite = null;
     }
 
-    @NonNull private String appendToAcceptLanguage(@NonNull String 
acceptLanguage,
-            @NonNull String languageCode, float quality) {
-        // If accept-language already contains the language, just return 
accept-language.
-        if (acceptLanguage.contains(languageCode)) {
-            return acceptLanguage;
+    private HashMap<String, String> buildCustomHeaders(String acceptLanguage) {
+        // 
https://lists.wikimedia.org/pipermail/wikimedia-l/2014-April/071131.html
+        HashMap<String, String> headers = new HashMap<>();
+
+        headers.put("User-Agent", getUserAgent());
+
+        // Add the app install ID to the header, but only if the user has not 
opted out of logging
+        if (isEventLoggingEnabled()) {
+            headers.put("X-WMF-UUID", getAppInstallID());
         }
 
-        // If accept-language is empty, don't append. Just return the language.
-        if (acceptLanguage.isEmpty()) {
-            return languageCode;
-        }
+        headers.put("Accept-Language", acceptLanguage);
 
-        // Accept-language is nonempty, append the language.
-        return String.format("%s,%s;q=%.1f", acceptLanguage, languageCode, 
quality);
+        return headers;
     }
 }
diff --git 
a/wikipedia/src/main/java/org/wikipedia/bridge/CommunicationBridge.java 
b/wikipedia/src/main/java/org/wikipedia/bridge/CommunicationBridge.java
index 9cd62d6..656c941 100644
--- a/wikipedia/src/main/java/org/wikipedia/bridge/CommunicationBridge.java
+++ b/wikipedia/src/main/java/org/wikipedia/bridge/CommunicationBridge.java
@@ -4,6 +4,7 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
+import android.support.annotation.NonNull;
 import android.util.Log;
 import android.webkit.ConsoleMessage;
 import android.webkit.JavascriptInterface;
@@ -134,7 +135,7 @@
         }
 
         @Override
-        public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
+        public boolean onConsoleMessage(@NonNull ConsoleMessage 
consoleMessage) {
             Log.d("WikipediaWeb", consoleMessage.sourceId() + ":" + 
consoleMessage.lineNumber() + " - " + consoleMessage.message());
             return true;
         }
diff --git a/wikipedia/src/main/java/org/wikipedia/concurrency/AsyncTask.java 
b/wikipedia/src/main/java/org/wikipedia/concurrency/AsyncTask.java
index 83116e4..9045403 100644
--- a/wikipedia/src/main/java/org/wikipedia/concurrency/AsyncTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/concurrency/AsyncTask.java
@@ -25,6 +25,7 @@
 import android.os.Handler;
 import android.os.Message;
 import android.os.Process;
+import android.support.annotation.NonNull;
 
 import java.util.ArrayDeque;
 import java.util.concurrent.BlockingQueue;
@@ -195,7 +196,7 @@
     private static final ThreadFactory sThreadFactory = new ThreadFactory() {
         private final AtomicInteger mCount = new AtomicInteger(1);
 
-        public Thread newThread(Runnable r) {
+        public Thread newThread(@NonNull Runnable r) {
             return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
         }
     };
@@ -233,7 +234,7 @@
         final ArrayDeque<Runnable> mTasks = new ArrayDeque<>();
         Runnable mActive;
 
-        public synchronized void execute(final Runnable r) {
+        public synchronized void execute(@NonNull final Runnable r) {
             mTasks.offer(new Runnable() {
                 public void run() {
                     try {
diff --git 
a/wikipedia/src/main/java/org/wikipedia/data/SQLiteContentProvider.java 
b/wikipedia/src/main/java/org/wikipedia/data/SQLiteContentProvider.java
index 0350223..1e89888 100644
--- a/wikipedia/src/main/java/org/wikipedia/data/SQLiteContentProvider.java
+++ b/wikipedia/src/main/java/org/wikipedia/data/SQLiteContentProvider.java
@@ -7,6 +7,7 @@
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteQueryBuilder;
 import android.net.Uri;
+import android.support.annotation.NonNull;
 
 import org.wikipedia.BuildConfig;
 
@@ -113,7 +114,7 @@
     }
 
     @Override
-    public int bulkInsert(Uri uri, ContentValues[] values) {
+    public int bulkInsert(Uri uri, @NonNull ContentValues[] values) {
         int uriType = uriMatcher.match(uri);
         SQLiteDatabase sqlDB = getDbOpenHelper().getWritableDatabase();
         sqlDB.beginTransaction();
diff --git 
a/wikipedia/src/main/java/org/wikipedia/editing/richtext/ColorSpanEx.java 
b/wikipedia/src/main/java/org/wikipedia/editing/richtext/ColorSpanEx.java
index 9aa90f0..2d0fb0a 100644
--- a/wikipedia/src/main/java/org/wikipedia/editing/richtext/ColorSpanEx.java
+++ b/wikipedia/src/main/java/org/wikipedia/editing/richtext/ColorSpanEx.java
@@ -1,5 +1,6 @@
 package org.wikipedia.editing.richtext;
 
+import android.support.annotation.NonNull;
 import android.text.TextPaint;
 import android.text.style.ForegroundColorSpan;
 
@@ -18,7 +19,7 @@
     private int backColor;
 
     @Override
-    public void updateDrawState(TextPaint tp) {
+    public void updateDrawState(@NonNull TextPaint tp) {
         tp.bgColor = backColor;
         super.updateDrawState(tp);
     }
diff --git 
a/wikipedia/src/main/java/org/wikipedia/interlanguage/AcceptLanguageUtil.java 
b/wikipedia/src/main/java/org/wikipedia/interlanguage/AcceptLanguageUtil.java
new file mode 100644
index 0000000..c8213f5
--- /dev/null
+++ 
b/wikipedia/src/main/java/org/wikipedia/interlanguage/AcceptLanguageUtil.java
@@ -0,0 +1,40 @@
+package org.wikipedia.interlanguage;
+
+import android.support.annotation.NonNull;
+
+public final class AcceptLanguageUtil {
+    private static final float APP_LANGUAGE_QUALITY = .9f;
+    private static final float SYSTEM_LANGUAGE_QUALITY = .8f;
+
+    /**
+     * @return The value that should go in the Accept-Language header.
+     */
+    @NonNull
+    public static String getAcceptLanguage(@NonNull String siteLanguageCode,
+                                           @NonNull String appLanguageCode,
+                                           @NonNull String systemLanguageCode) 
{
+        String acceptLanguage = siteLanguageCode;
+        acceptLanguage = appendToAcceptLanguage(acceptLanguage, 
appLanguageCode, APP_LANGUAGE_QUALITY);
+        acceptLanguage = appendToAcceptLanguage(acceptLanguage, 
systemLanguageCode, SYSTEM_LANGUAGE_QUALITY);
+        return acceptLanguage;
+    }
+
+    @NonNull
+    private static String appendToAcceptLanguage(@NonNull String 
acceptLanguage,
+                                                 @NonNull String languageCode, 
float quality) {
+        // If accept-language already contains the language, just return 
accept-language.
+        if (acceptLanguage.contains(languageCode)) {
+            return acceptLanguage;
+        }
+
+        // If accept-language is empty, don't append. Just return the language.
+        if (acceptLanguage.isEmpty()) {
+            return languageCode;
+        }
+
+        // Accept-language is nonempty, append the language.
+        return String.format("%s,%s;q=%.1f", acceptLanguage, languageCode, 
quality);
+    }
+
+    private AcceptLanguageUtil() { }
+}
\ No newline at end of file
diff --git 
a/wikipedia/src/main/java/org/wikipedia/nearby/NearbyCompassView.java 
b/wikipedia/src/main/java/org/wikipedia/nearby/NearbyCompassView.java
index 5c8293e..324826a 100644
--- a/wikipedia/src/main/java/org/wikipedia/nearby/NearbyCompassView.java
+++ b/wikipedia/src/main/java/org/wikipedia/nearby/NearbyCompassView.java
@@ -8,6 +8,7 @@
 import android.graphics.Path;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffXfermode;
+import android.support.annotation.NonNull;
 import android.util.AttributeSet;
 import android.widget.ImageView;
 
@@ -123,7 +124,7 @@
     }
 
     @Override
-    protected void onDraw(Canvas canvas) {
+    protected void onDraw(@NonNull Canvas canvas) {
         //draw the original image...
         super.onDraw(canvas);
 
diff --git 
a/wikipedia/src/main/java/org/wikipedia/onboarding/OnboardingActivity.java 
b/wikipedia/src/main/java/org/wikipedia/onboarding/OnboardingActivity.java
index 44a3b03..d1c7138 100644
--- a/wikipedia/src/main/java/org/wikipedia/onboarding/OnboardingActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/onboarding/OnboardingActivity.java
@@ -5,6 +5,7 @@
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
+import android.support.annotation.NonNull;
 import android.text.Html;
 import android.view.View;
 import android.view.Window;
@@ -118,7 +119,7 @@
     }
 
     @Override
-    protected void onSaveInstanceState(Bundle outState) {
+    protected void onSaveInstanceState(@NonNull Bundle outState) {
         super.onSaveInstanceState(outState);
         // Put item in bundle so start events are not fired purely because of 
activity recreation
         // This makes the event logging data more closely match user intent 
and behaviour
diff --git 
a/wikipedia/src/main/java/org/wikipedia/page/LinkMovementMethodExt.java 
b/wikipedia/src/main/java/org/wikipedia/page/LinkMovementMethodExt.java
index e85db57..8395404 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/LinkMovementMethodExt.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/LinkMovementMethodExt.java
@@ -1,5 +1,6 @@
 package org.wikipedia.page;
 
+import android.support.annotation.NonNull;
 import android.text.Layout;
 import android.text.Spannable;
 import android.text.method.LinkMovementMethod;
@@ -20,7 +21,7 @@
     }
 
     @Override
-    public boolean onTouchEvent(final TextView widget, final Spannable buffer, 
final MotionEvent event) {
+    public boolean onTouchEvent(@NonNull final TextView widget, @NonNull final 
Spannable buffer, @NonNull final MotionEvent event) {
         final int action = event.getAction();
         if (action == MotionEvent.ACTION_UP) {
             final int x = (int) event.getX() - widget.getTotalPaddingLeft() + 
widget.getScrollX();
diff --git 
a/wikipedia/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java 
b/wikipedia/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
index c050a31..1287a58 100755
--- 
a/wikipedia/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
@@ -16,6 +16,7 @@
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.v4.app.DialogFragment;
 import android.support.v4.view.GestureDetectorCompat;
 import android.text.Spannable;
@@ -99,7 +100,7 @@
             private float touchSlop = 
ViewConfiguration.get(getDialog().getContext()).getScaledTouchSlop();
 
             @Override
-            public boolean onTouchEvent(TextView widget, Spannable buffer, 
MotionEvent event) {
+            public boolean onTouchEvent(@NonNull TextView widget, @NonNull 
Spannable buffer, @NonNull MotionEvent event) {
                 switch (event.getAction()) {
                     case MotionEvent.ACTION_DOWN:
                         startX = event.getX();
@@ -182,6 +183,7 @@
         }
     }
 
+    @NonNull
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         Dialog dialog = super.onCreateDialog(savedInstanceState);
diff --git 
a/wikipedia/src/main/java/org/wikipedia/settings/CheckBoxPreferenceMultiLine.java
 
b/wikipedia/src/main/java/org/wikipedia/settings/CheckBoxPreferenceMultiLine.java
index 7b4809e..f144192 100644
--- 
a/wikipedia/src/main/java/org/wikipedia/settings/CheckBoxPreferenceMultiLine.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/settings/CheckBoxPreferenceMultiLine.java
@@ -2,6 +2,7 @@
 
 import android.content.Context;
 import android.preference.CheckBoxPreference;
+import android.support.annotation.NonNull;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.TextView;
@@ -21,7 +22,7 @@
     }
 
     @Override
-    protected void onBindView(View view) {
+    protected void onBindView(@NonNull View view) {
         super.onBindView(view);
         TextView textView = (TextView) view.findViewById(android.R.id.title);
         if (textView != null) {
diff --git 
a/wikipedia/src/main/java/org/wikipedia/settings/PreferenceMultiLine.java 
b/wikipedia/src/main/java/org/wikipedia/settings/PreferenceMultiLine.java
index 6129f86..f5b686f 100644
--- a/wikipedia/src/main/java/org/wikipedia/settings/PreferenceMultiLine.java
+++ b/wikipedia/src/main/java/org/wikipedia/settings/PreferenceMultiLine.java
@@ -3,6 +3,7 @@
 import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.preference.Preference;
+import android.support.annotation.NonNull;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.TextView;
@@ -25,7 +26,7 @@
     }
 
     @Override
-    protected void onBindView(View view) {
+    protected void onBindView(@NonNull View view) {
         super.onBindView(view);
         TextView textView = (TextView) view.findViewById(android.R.id.title);
         if (textView != null) {
diff --git 
a/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivityGB.java 
b/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivityGB.java
index 96a5686..325d8d7 100644
--- a/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivityGB.java
+++ b/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivityGB.java
@@ -9,6 +9,7 @@
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceManager;
+import android.support.annotation.NonNull;
 import android.view.MenuItem;
 
 /**
@@ -44,7 +45,7 @@
         }
     }
 
-    public boolean onMenuItemSelected(int featureId, MenuItem item) {
+    public boolean onMenuItemSelected(int featureId, @NonNull MenuItem item) {
         switch (item.getItemId()) {
             case android.R.id.home:
                 finish();

-- 
To view, visit https://gerrit.wikimedia.org/r/217972
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibc64f1fce5308faf5bd6b30fef62ba30d3c6d1b6
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to