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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java

Issue 1634213002: Append late URLs at the end of the nearby URL list (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: expand ternary operators, rename notifyOnUrlListChanged Created 4 years, 11 months 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 | « chrome/android/java/src/org/chromium/chrome/browser/physicalweb/NearbyUrlsAdapter.java ('k') | 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/physicalweb/UrlManager.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java
index 07b4dc23f5896e19961e0efc3cd25b64f711b128..d99a59de9f15ad84c5f2cf4bae447ef2e5ba9feb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java
@@ -20,12 +20,14 @@ import android.os.SystemClock;
import android.support.v4.app.NotificationCompat;
import org.chromium.base.Log;
+import org.chromium.base.ObserverList;
import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.notifications.NotificationConstants;
import org.chromium.chrome.browser.notifications.NotificationManagerProxy;
import org.chromium.chrome.browser.notifications.NotificationManagerProxyImpl;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -57,6 +59,19 @@ class UrlManager {
private final Context mContext;
private NotificationManagerProxy mNotificationManager;
private PwsClient mPwsClient;
+ private final ObserverList<Listener> mObservers;
+
+ /**
+ * Interface for observers that should be notified when the nearby URL list changes.
+ */
+ public interface Listener {
+ /**
+ * Callback called when one or more URLs are added to the URL list.
+ * @param urls A set of strings containing nearby URLs resolvable with our resolution
+ * service.
+ */
+ void onDisplayableUrlsAdded(Collection<String> urls);
+ }
/**
* Construct the UrlManager.
@@ -67,6 +82,7 @@ class UrlManager {
mNotificationManager = new NotificationManagerProxyImpl(
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE));
mPwsClient = new PwsClientImpl();
+ mObservers = new ObserverList<Listener>();
initSharedPreferences();
}
@@ -83,6 +99,22 @@ class UrlManager {
}
/**
+ * Add an observer to be notified on changes to the nearby URL list.
+ * @param observer The observer to add.
+ */
+ public void addObserver(Listener observer) {
+ mObservers.addObserver(observer);
+ }
+
+ /**
+ * Remove an observer from the observer list.
+ * @param observer The observer to remove.
+ */
+ public void removeObserver(Listener observer) {
+ mObservers.removeObserver(observer);
+ }
+
+ /**
* Add a URL to the store of URLs.
* This method additionally updates the Physical Web notification.
* @param url The URL to add.
@@ -93,8 +125,21 @@ class UrlManager {
boolean isOnboarding = PhysicalWeb.isOnboarding(mContext);
Set<String> nearbyUrls = getCachedNearbyUrls();
- boolean isUrlListEmptyBefore = (isOnboarding && nearbyUrls.isEmpty())
- || (!isOnboarding && getUrls().isEmpty());
+ // A URL is displayable if it is both nearby and resolved through our resolution service.
+ // When new displayable URLs are found we tell our observers. In onboarding mode we do not
+ // use our resolution service so the displayable list should always be empty. However, we
+ // still want to track the nearby URL count so we can show an opt-in notification.
+ // In normal operation, both the notification and observers are updated for changes to the
+ // displayable list.
+
+ int displayableUrlsBefore;
+ int notificationUrlsBefore;
+ if (isOnboarding) {
+ displayableUrlsBefore = 0;
+ notificationUrlsBefore = nearbyUrls.size();
+ } else {
+ displayableUrlsBefore = notificationUrlsBefore = getUrls().size();
+ }
nearbyUrls.add(url);
putCachedNearbyUrls(nearbyUrls);
@@ -103,8 +148,17 @@ class UrlManager {
resolveUrl(url);
}
- boolean isUrlListEmptyAfter = !isOnboarding && getUrls().isEmpty();
- updateNotification(isUrlListEmptyBefore, isUrlListEmptyAfter);
+ int displayableUrlsAfter;
+ int notificationUrlsAfter;
+ if (isOnboarding) {
+ displayableUrlsAfter = 0;
+ notificationUrlsAfter = nearbyUrls.size();
+ } else {
+ displayableUrlsAfter = notificationUrlsAfter = getUrls().size();
+ }
+
+ updateNotification(notificationUrlsBefore == 0, notificationUrlsAfter == 0);
+ notifyDisplayableUrlsChanged(displayableUrlsBefore, displayableUrlsAfter, url);
}
/**
@@ -120,9 +174,8 @@ class UrlManager {
nearbyUrls.remove(url);
putCachedNearbyUrls(nearbyUrls);
- boolean isUrlListEmptyAfter = (isOnboarding && nearbyUrls.isEmpty())
- || (!isOnboarding && getUrls().isEmpty());
- updateNotification(false, isUrlListEmptyAfter);
+ int notificationUrlsAfter = isOnboarding ? nearbyUrls.size() : getUrls().size();
+ updateNotification(false, notificationUrlsAfter == 0);
}
/**
@@ -177,11 +230,14 @@ class UrlManager {
private void addResolvedUrl(String url) {
Log.d(TAG, "PWS resolved: %s", url);
Set<String> resolvedUrls = getCachedResolvedUrls();
- boolean isUrlListEmptyBefore = getUrls().isEmpty();
+ int displayableUrlsBefore = getUrls().size();
resolvedUrls.add(url);
putCachedResolvedUrls(resolvedUrls);
- updateNotification(isUrlListEmptyBefore, getUrls().isEmpty());
+
+ int displayableUrlsAfter = getUrls().size();
+ updateNotification(displayableUrlsBefore == 0, displayableUrlsAfter == 0);
+ notifyDisplayableUrlsChanged(displayableUrlsBefore, displayableUrlsAfter, url);
}
private void removeResolvedUrl(String url) {
@@ -377,6 +433,18 @@ class UrlManager {
alarmManager.cancel(pendingIntent);
}
+ private void notifyDisplayableUrlsChanged(int displayCountBefore, int displayCountAfter,
+ String url) {
+ if (displayCountAfter > displayCountBefore) {
+ Collection<String> urls = new ArrayList<String>();
+ urls.add(url);
+ Collection<String> wrappedUrls = Collections.unmodifiableCollection(urls);
+ for (Listener observer : mObservers) {
+ observer.onDisplayableUrlsAdded(wrappedUrls);
+ }
+ }
+ }
+
@VisibleForTesting
void overridePwsClientForTesting(PwsClient pwsClient) {
mPwsClient = pwsClient;
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/physicalweb/NearbyUrlsAdapter.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698