Commit 2f81a12a authored by Mohamed Amir Yosef's avatar Mohamed Amir Yosef Committed by Commit Bot

[FCM] Adding the ability to change the subscription laziness mode.

This CL adds the ability to change a subscription from lazy to unlazy.

Bug: 882887
Change-Id: I0dc68442feb2ac460b82896ee424c806f6613041
Reviewed-on: https://chromium-review.googlesource.com/c/1296603
Commit-Queue: Mohamed Amir Yosef <mamir@chromium.org>
Reviewed-by: default avatarPeter Beverloo <peter@chromium.org>
Reviewed-by: default avatarPeter Conn <peconn@chromium.org>
Cr-Commit-Position: refs/heads/master@{#610175}
parent d6ca4cfd
...@@ -85,18 +85,26 @@ public class LazySubscriptionsManager { ...@@ -85,18 +85,26 @@ public class LazySubscriptionsManager {
* Stores the information about lazy subscriptions in SharedPreferences. * Stores the information about lazy subscriptions in SharedPreferences.
*/ */
public static void storeLazinessInformation(final String subscriptionId, boolean isLazy) { public static void storeLazinessInformation(final String subscriptionId, boolean isLazy) {
if (isLazy) { boolean isAlreadyLazy = isSubscriptionLazy(subscriptionId);
Context context = ContextUtils.getApplicationContext(); if (isAlreadyLazy == isLazy) {
SharedPreferences sharedPrefs = return;
context.getSharedPreferences(PREF_PACKAGE, Context.MODE_PRIVATE); }
Set<String> lazyIds = new HashSet<>( if (isAlreadyLazy) {
sharedPrefs.getStringSet(FCM_LAZY_SUBSCRIPTIONS, Collections.emptySet())); // Switching from lazy to unlazy.
// Delete any queued messages.
deletePersistedMessagesForSubscriptionId(subscriptionId);
}
Context context = ContextUtils.getApplicationContext();
SharedPreferences sharedPrefs =
context.getSharedPreferences(PREF_PACKAGE, Context.MODE_PRIVATE);
Set<String> lazyIds = new HashSet<>(
sharedPrefs.getStringSet(FCM_LAZY_SUBSCRIPTIONS, Collections.emptySet()));
if (isAlreadyLazy) {
lazyIds.remove(subscriptionId);
} else { // Switching from unlazy to lazy.
lazyIds.add(subscriptionId); lazyIds.add(subscriptionId);
sharedPrefs.edit().putStringSet(FCM_LAZY_SUBSCRIPTIONS, lazyIds).apply();
} }
// TODO(https://crbug.com/882887): Check if that sharedPrefs.edit().putStringSet(FCM_LAZY_SUBSCRIPTIONS, lazyIds).apply();
// subscription was marked lazy before and handle the change
// accordingly.
} }
/** /**
......
...@@ -16,6 +16,7 @@ import org.junit.Test; ...@@ -16,6 +16,7 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.chromium.base.metrics.CachedMetrics;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.test.ShadowRecordHistogram; import org.chromium.base.metrics.test.ShadowRecordHistogram;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
...@@ -30,6 +31,8 @@ import java.util.Set; ...@@ -30,6 +31,8 @@ import java.util.Set;
public class LazySubscriptionsManagerTest { public class LazySubscriptionsManagerTest {
@Before @Before
public void setUp() { public void setUp() {
// This commits and clears any cached metrics.
CachedMetrics.commitCachedMetrics();
ShadowRecordHistogram.reset(); ShadowRecordHistogram.reset();
} }
...@@ -77,6 +80,40 @@ public class LazySubscriptionsManagerTest { ...@@ -77,6 +80,40 @@ public class LazySubscriptionsManagerTest {
assertFalse(LazySubscriptionsManager.isSubscriptionLazy(subscriptionId)); assertFalse(LazySubscriptionsManager.isSubscriptionLazy(subscriptionId));
} }
/**
* Tests that switching from lazy to unlazy should leave no queued messages behind.
*/
@Test
public void testSwitchingFromLazyToUnlazy() {
final String subscriptionId = "subscription_id";
LazySubscriptionsManager.storeLazinessInformation(subscriptionId, true);
Bundle extras = new Bundle();
extras.putString("subtype", "MyAppId");
extras.putString("collapse_key", "CollapseKey");
GCMMessage message = new GCMMessage("MySenderId", extras);
LazySubscriptionsManager.persistMessage(subscriptionId, message);
assertEquals(1, LazySubscriptionsManager.readMessages(subscriptionId).length);
LazySubscriptionsManager.storeLazinessInformation(subscriptionId, false);
assertEquals(0, LazySubscriptionsManager.readMessages(subscriptionId).length);
}
/**
* Tests that switching from lazy to unlazy and back to lazy.
*/
@Test
public void testSwitchingFromLazyToUnlazyAndBackToLazy() {
final String subscriptionId = "subscription_id";
LazySubscriptionsManager.storeLazinessInformation(subscriptionId, true);
assertTrue(LazySubscriptionsManager.isSubscriptionLazy(subscriptionId));
LazySubscriptionsManager.storeLazinessInformation(subscriptionId, false);
assertFalse(LazySubscriptionsManager.isSubscriptionLazy(subscriptionId));
LazySubscriptionsManager.storeLazinessInformation(subscriptionId, true);
assertTrue(LazySubscriptionsManager.isSubscriptionLazy(subscriptionId));
}
@Test @Test
public void testGetLazySubscriptionIds() { public void testGetLazySubscriptionIds() {
final String subscriptionId1 = "subscription_id1"; final String subscriptionId1 = "subscription_id1";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment