Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.wordpress.android;

import junit.framework.TestCase;

public class UserAgentTest extends TestCase {

/**
* Copy of {@link WordPress#USER_AGENT_APPNAME}.
* Copied here in order to be able to catch User-Agent changes and verify that they're intentional.
*/
private static final String USER_AGENT_APPNAME = "wp-android";

public void testGetDefaultUserAgent() {
String defaultUserAgent = WordPress.getDefaultUserAgent();
assertNotNull("Default User-Agent must be set", defaultUserAgent);
assertTrue("Default User-Agent must not be an empty string", defaultUserAgent.length() > 0);
assertFalse("Default User-Agent must not contain app name", defaultUserAgent.contains(USER_AGENT_APPNAME));
}

public void testGetUserAgent() {
String userAgent = WordPress.getUserAgent();
assertNotNull("User-Agent must be set", userAgent);
assertTrue("User-Agent must not be an empty string", userAgent.length() > 0);
assertTrue("User-Agent must contain app name substring", userAgent.contains(USER_AGENT_APPNAME));

String defaultUserAgent = WordPress.getDefaultUserAgent();
assertTrue("User-Agent must be derived from default User-Agent", userAgent.contains(defaultUserAgent));
}
}
32 changes: 24 additions & 8 deletions WordPress/src/main/java/org/wordpress/android/WordPress.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import android.os.StrictMode;
import android.os.SystemClock;
import android.text.TextUtils;
import android.webkit.WebView;

import com.android.volley.RequestQueue;
import com.android.volley.VolleyLog;
Expand Down Expand Up @@ -558,22 +559,37 @@ public static String getLoginUrl(Blog blog) {
return loginURL;
}

/**
* Device's default User-Agent string.
* E.g.:
* "Mozilla/5.0 (Linux; Android 6.0; Android SDK built for x86_64 Build/MASTER; wv)
* AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.119 Mobile
* Safari/537.36"
*/
private static String mDefaultUserAgent;
public static String getDefaultUserAgent() {
if (mDefaultUserAgent == null) {
// TODO: use WebSettings.getDefaultUserAgent() after upgrade to API level 17+
mDefaultUserAgent = new WebView(getContext()).getSettings().getUserAgentString();
}
return mDefaultUserAgent;
}

/**
* User-Agent string when making HTTP connections, for both API traffic and WebViews.
* Follows the format detailed at http://tools.ietf.org/html/rfc2616#section-14.43,
* ie: "AppName/AppVersion (OS Version; Locale; Device)"
* "wp-android/2.6.4 (Android 4.3; en_US; samsung GT-I9505/jfltezh)"
* "wp-android/2.6.3 (Android 4.4.2; en_US; LGE Nexus 5/hammerhead)"
* Appends "wp-android/version" to WebView's default User-Agent string for the webservers
* to get the full feature list of the browser and serve content accordingly, e.g.:
* "Mozilla/5.0 (Linux; Android 6.0; Android SDK built for x86_64 Build/MASTER; wv)
* AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.119 Mobile
* Safari/537.36 wp-android/4.7"
* Note that app versions prior to 2.7 simply used "wp-android" as the user agent
**/
private static final String USER_AGENT_APPNAME = "wp-android";
private static String mUserAgent;
public static String getUserAgent() {
if (mUserAgent == null) {
mUserAgent = USER_AGENT_APPNAME + "/" + PackageUtils.getVersionName(getContext())
+ " (Android " + Build.VERSION.RELEASE + "; "
+ Locale.getDefault().toString() + "; "
+ Build.MANUFACTURER + " " + Build.MODEL + "/" + Build.PRODUCT + ")";
mUserAgent = getDefaultUserAgent() + " "
+ USER_AGENT_APPNAME + "/" + PackageUtils.getVersionName(getContext());
}
return mUserAgent;
}
Expand Down