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