Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java

Issue 2506193003: Hide location permission if a search engine is non-Google or its location permission is unset. (Closed)
Patch Set: Update based on Peter's suggestion. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java
index 792ea9b31ae8182bf99982129943194274e2f44c..430f69af85ba92eecd4702f03f60353a891bde8b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEngineAdapter.java
@@ -10,6 +10,7 @@ import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
+import android.support.annotation.IntDef;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
@@ -38,6 +39,8 @@ import org.chromium.components.location.LocationUtils;
import org.chromium.ui.text.SpanApplier;
import org.chromium.ui.text.SpanApplier.SpanInfo;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.List;
/**
@@ -56,6 +59,13 @@ public class SearchEngineAdapter extends BaseAdapter implements LoadListener, On
void currentSearchEngineDetermined(int selectedIndex);
}
+ private static final int TYPE_LOCATION_ALLOW = 0;
+ private static final int TYPE_LOCATION_BLOCK = 1;
+ private static final int TYPE_LOCATION_ASK = 2;
+ @IntDef({TYPE_LOCATION_ALLOW, TYPE_LOCATION_BLOCK, TYPE_LOCATION_ASK})
+ @Retention(RetentionPolicy.SOURCE)
+ private @interface LocationType {}
Peter Kasting 2016/11/18 20:25:43 Can you just return the ContentSetting directly?
ltian 2016/11/18 23:10:51 Done.
+
// The current context.
private Context mContext;
@@ -205,23 +215,27 @@ public class SearchEngineAdapter extends BaseAdapter implements LoadListener, On
TextView link = (TextView) view.findViewById(R.id.link);
link.setVisibility(selected ? View.VISIBLE : View.GONE);
if (selected) {
- ForegroundColorSpan linkSpan = new ForegroundColorSpan(
- ApiCompatibilityUtils.getColor(resources, R.color.pref_accent_color));
- if (LocationUtils.getInstance().isSystemLocationSettingEnabled()) {
- String message = mContext.getString(
- locationEnabled(position, true)
- ? R.string.search_engine_location_allowed
- : R.string.search_engine_location_blocked);
- SpannableString messageWithLink = new SpannableString(message);
- messageWithLink.setSpan(linkSpan, 0, messageWithLink.length(), 0);
- link.setText(messageWithLink);
+ if (shouldShowLocationInfo(position)) {
+ ForegroundColorSpan linkSpan = new ForegroundColorSpan(
+ ApiCompatibilityUtils.getColor(resources, R.color.pref_accent_color));
+ if (LocationUtils.getInstance().isSystemLocationSettingEnabled()) {
+ String message = mContext.getString(
+ locationEnabled(position, true)
+ ? R.string.search_engine_location_allowed
+ : R.string.search_engine_location_blocked);
+ SpannableString messageWithLink = new SpannableString(message);
+ messageWithLink.setSpan(linkSpan, 0, messageWithLink.length(), 0);
+ link.setText(messageWithLink);
+ } else {
+ link.setText(SpanApplier.applySpans(
+ mContext.getString(R.string.android_location_off),
+ new SpanInfo("<link>", "</link>", linkSpan)));
+ }
+
+ link.setOnClickListener(this);
} else {
- link.setText(SpanApplier.applySpans(
- mContext.getString(R.string.android_location_off),
- new SpanInfo("<link>", "</link>", linkSpan)));
+ link.setVisibility(View.GONE);
}
-
- link.setOnClickListener(this);
}
return view;
@@ -287,17 +301,37 @@ public class SearchEngineAdapter extends BaseAdapter implements LoadListener, On
}
}
- private boolean locationEnabled(int position, boolean checkGeoHeader) {
- if (position == -1) return false;
+ @LocationType private int getLocationPermissionType(int position, boolean checkGeoHeader) {
+ if (position == -1) {
+ return TYPE_LOCATION_BLOCK;
+ }
String url = TemplateUrlService.getInstance().getSearchEngineUrlFromTemplateUrl(
toIndex(position));
GeolocationInfo locationSettings = new GeolocationInfo(url, null, false);
ContentSetting locationPermission = locationSettings.getContentSetting();
- // Handle the case where the geoHeader being sent when no permission has been specified.
- if (locationPermission == ContentSetting.ASK && checkGeoHeader) {
- return GeolocationHeader.isGeoHeaderEnabledForUrl(mContext, url, false);
+ if (locationPermission == ContentSetting.ASK) {
+ // Handle the case where the geoHeader being sent when no permission has been specified.
+ if (checkGeoHeader && GeolocationHeader.isGeoHeaderEnabledForUrl(
Peter Kasting 2016/11/18 20:25:43 Nit: Simpler: if (checkGeoHeader && ...) lo
ltian 2016/11/18 23:10:51 Done.
+ mContext, url, false)) {
+ return TYPE_LOCATION_ALLOW;
+ } else {
+ return TYPE_LOCATION_ASK;
+ }
+ } else if (locationPermission == ContentSetting.ALLOW) {
+ return TYPE_LOCATION_ALLOW;
+ } else {
+ return TYPE_LOCATION_BLOCK;
}
- return locationPermission == ContentSetting.ALLOW;
+ }
+
+ private boolean locationEnabled(int position, boolean checkGeoHeader) {
+ return getLocationPermissionType(position, checkGeoHeader) == TYPE_LOCATION_ALLOW;
+ }
+
+ // For Google search engine, if location permission is granted for the whole app,
+ // even its own location permission is unset, location permission is still granted for it.
Peter Kasting 2016/11/18 20:25:43 Nit: This comment no longer seems relevant.
ltian 2016/11/18 23:10:51 Done.
+ private boolean shouldShowLocationInfo(int position) {
+ return getLocationPermissionType(position, true) != TYPE_LOCATION_ASK;
Peter Kasting 2016/11/18 20:25:43 Nit: Could just inline this into the lone caller,
ltian 2016/11/18 23:10:51 Done.
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698