Dbrant has uploaded a new change for review.
https://gerrit.wikimedia.org/r/322700
Change subject: Utility functions for accessing GeoIP information.
......................................................................
Utility functions for accessing GeoIP information.
Lays some groundwork for conditionally showing announcements based on
country code.
Bug: T151085
Change-Id: I4857433286d415d1a1a15cf7e22e603cb6b70410
---
M app/src/main/java/org/wikipedia/SharedPreferenceCookieManager.java
M app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
A app/src/main/java/org/wikipedia/util/GeoUtil.java
M app/src/main/java/org/wikipedia/util/UriUtil.java
4 files changed, 110 insertions(+), 22 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/00/322700/1
diff --git a/app/src/main/java/org/wikipedia/SharedPreferenceCookieManager.java
b/app/src/main/java/org/wikipedia/SharedPreferenceCookieManager.java
index cf2a157..a76430f 100644
--- a/app/src/main/java/org/wikipedia/SharedPreferenceCookieManager.java
+++ b/app/src/main/java/org/wikipedia/SharedPreferenceCookieManager.java
@@ -1,6 +1,7 @@
package org.wikipedia;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import org.wikipedia.settings.Prefs;
import org.wikipedia.util.StringUtil;
@@ -14,6 +15,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -136,6 +138,29 @@
return StringUtil.delimiterStringToList(str, DELIMITER);
}
+ @Nullable
+ public synchronized String getCookieByName(@NonNull String name) {
+ for (String domainSpec: cookieJar.keySet()) {
+ for (String cookie : cookieJar.get(domainSpec).keySet()) {
+ if (cookie.equals(name)) {
+ return cookieJar.get(domainSpec).get(cookie);
+ }
+ }
+ }
+ return null;
+ }
+
+ public synchronized void clearCookieByName(@NonNull String name) {
+ for (String domainSpec: cookieJar.keySet()) {
+ Iterator<String> iterator =
cookieJar.get(domainSpec).keySet().iterator();
+ while (iterator.hasNext()) {
+ if (iterator.next().equals(name)) {
+ iterator.remove();
+ }
+ }
+ }
+ }
+
private Map<String, String> makeCookieMap(@NonNull List<String> cookies) {
Map<String, String> cookiesMap = new HashMap<>();
for (String cookie : cookies) {
diff --git
a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
index d954388..230e15c 100755
--- a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
+++ b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
@@ -38,7 +38,7 @@
import org.wikipedia.server.PageServiceFactory;
import org.wikipedia.server.PageSummary;
import org.wikipedia.util.FeedbackUtil;
-import org.wikipedia.util.UriUtil;
+import org.wikipedia.util.GeoUtil;
import org.wikipedia.util.log.L;
import org.wikipedia.views.ViewUtil;
@@ -404,7 +404,7 @@
private void goToExternalMapsApp() {
if (location != null) {
dismiss();
- UriUtil.sendGeoIntent(getActivity(), location,
pageTitle.getDisplayText());
+ GeoUtil.sendGeoIntent(getActivity(), location,
pageTitle.getDisplayText());
}
}
diff --git a/app/src/main/java/org/wikipedia/util/GeoUtil.java
b/app/src/main/java/org/wikipedia/util/GeoUtil.java
new file mode 100644
index 0000000..968bde9
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/util/GeoUtil.java
@@ -0,0 +1,83 @@
+package org.wikipedia.util;
+
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.location.Location;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+
+import org.wikipedia.R;
+import org.wikipedia.WikipediaApp;
+
+public final class GeoUtil {
+ private enum GeoIPComponent {
+ COUNTRY, REGION, CITY, LATITUDE, LONGITUDE, VERSION
+ }
+
+ public static void sendGeoIntent(@NonNull Activity activity,
+ @NonNull Location location,
+ String placeName) {
+ String geoStr = "geo:";
+ geoStr += Double.toString(location.getLatitude()) + ","
+ + Double.toString(location.getLongitude());
+ if (!TextUtils.isEmpty(placeName)) {
+ geoStr += "?q=" + Uri.encode(placeName);
+ }
+ try {
+ activity.startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse(geoStr)));
+ } catch (ActivityNotFoundException e) {
+ FeedbackUtil.showMessage(activity, R.string.error_no_maps_app);
+ }
+ }
+
+ @Nullable
+ public static String getGeoIPCountry() {
+ return getGeoIPComponent(GeoIPComponent.COUNTRY);
+ }
+
+ @Nullable
+ public static String getGeoIPRegion() {
+ return getGeoIPComponent(GeoIPComponent.REGION);
+ }
+
+ @Nullable
+ public static String getGeoIPCity() {
+ return getGeoIPComponent(GeoIPComponent.CITY);
+ }
+
+ @Nullable
+ public static Location getGeoIPLocation() {
+ try {
+ Location location = new Location("");
+
location.setLatitude(Double.parseDouble(getGeoIPComponent(GeoIPComponent.LATITUDE)));
+
location.setLongitude(Double.parseDouble(getGeoIPComponent(GeoIPComponent.LONGITUDE)));
+ return location;
+ } catch (Exception e) {
+ // swallow exceptions from possible malformations in the cookie
+ }
+ return null;
+ }
+
+ /*
+ Information about the format and contents of the GeoIP cookie:
+
https://phabricator.wikimedia.org/diffusion/ECNO/browse/master/resources/subscribing/ext.centralNotice.geoIP.js
+ */
+ @Nullable
+ private static String getGeoIPComponent(GeoIPComponent component) {
+ String geoIP =
WikipediaApp.getInstance().getCookieManager().getCookieByName("GeoIP");
+ if (!TextUtils.isEmpty(geoIP) && geoIP.contains(":v4")) {
+ try {
+ return geoIP.split(":")[component.ordinal()];
+ } catch (Exception e) {
+ // swallow exceptions from possible malformations in the cookie
+ }
+ }
+ return null;
+ }
+
+ private GeoUtil() {
+ }
+}
diff --git a/app/src/main/java/org/wikipedia/util/UriUtil.java
b/app/src/main/java/org/wikipedia/util/UriUtil.java
index 485dbda..e69c0a6 100644
--- a/app/src/main/java/org/wikipedia/util/UriUtil.java
+++ b/app/src/main/java/org/wikipedia/util/UriUtil.java
@@ -1,17 +1,13 @@
package org.wikipedia.util;
-import android.app.Activity;
-import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
-import android.location.Location;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
-import org.wikipedia.R;
import org.wikipedia.WikipediaApp;
import org.wikipedia.page.PageTitle;
import org.wikipedia.settings.Prefs;
@@ -102,22 +98,6 @@
}
showZeroExitInterstitialDialog(context, uri);
- }
-
- public static void sendGeoIntent(@NonNull Activity activity,
- @NonNull Location location,
- String placeName) {
- String geoStr = "geo:";
- geoStr += Double.toString(location.getLatitude()) + ","
- + Double.toString(location.getLongitude());
- if (!TextUtils.isEmpty(placeName)) {
- geoStr += "?q=" + Uri.encode(placeName);
- }
- try {
- activity.startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse(geoStr)));
- } catch (ActivityNotFoundException e) {
- FeedbackUtil.showMessage(activity, R.string.error_no_maps_app);
- }
}
public static String getUrlWithProvenance(Context context, PageTitle title,
--
To view, visit https://gerrit.wikimedia.org/r/322700
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4857433286d415d1a1a15cf7e22e603cb6b70410
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits