Commit a93b363c authored by Henrique Nakashima's avatar Henrique Nakashima Committed by Commit Bot

Move a SharedPref from ChannelsUpdater to ChromePreferenceKeys

Register it in ChromePreferenceKeys and use SharedPreferencesManager
consistently instead of SharedPreferences directly.

Bug: 1022108
Change-Id: Id810a00d8135d6e742f314bc01573aa3fe7c463c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2032330
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Reviewed-by: default avatarPeter Beverloo <peter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#737482}
parent 3f8a2613
...@@ -4,25 +4,24 @@ ...@@ -4,25 +4,24 @@
package org.chromium.chrome.browser.notifications.channels; package org.chromium.chrome.browser.notifications.channels;
import android.content.SharedPreferences;
import android.os.Build; import android.os.Build;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.chrome.browser.notifications.NotificationManagerProxyImpl; import org.chromium.chrome.browser.notifications.NotificationManagerProxyImpl;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
/** /**
* Contains helper methods for checking if we should update channels and updating them if so. * Contains helper methods for checking if we should update channels and updating them if so.
*/ */
public class ChannelsUpdater { public class ChannelsUpdater {
@VisibleForTesting
static final String CHANNELS_VERSION_KEY = "channels_version_key";
private static final Object sLock = new Object(); private static final Object sLock = new Object();
private final ChannelsInitializer mChannelsInitializer; private final ChannelsInitializer mChannelsInitializer;
private final SharedPreferences mSharedPreferences; private final SharedPreferencesManager mSharedPreferences;
private final boolean mIsAtLeastO; private final boolean mIsAtLeastO;
private final int mChannelsVersion; private final int mChannelsVersion;
...@@ -35,15 +34,15 @@ public class ChannelsUpdater { ...@@ -35,15 +34,15 @@ public class ChannelsUpdater {
// when we won't need it. It's ok for these parameters to be null when mIsAtLeastO is false. // when we won't need it. It's ok for these parameters to be null when mIsAtLeastO is false.
public static final ChannelsUpdater INSTANCE = Build.VERSION.SDK_INT < Build.VERSION_CODES.O public static final ChannelsUpdater INSTANCE = Build.VERSION.SDK_INT < Build.VERSION_CODES.O
? new ChannelsUpdater(false /* isAtLeastO */, null, null, -1) ? new ChannelsUpdater(false /* isAtLeastO */, null, null, -1)
: new ChannelsUpdater(true /* isAtLeastO */, ContextUtils.getAppSharedPreferences(), : new ChannelsUpdater(true /* isAtLeastO */, SharedPreferencesManager.getInstance(),
new ChannelsInitializer(new NotificationManagerProxyImpl( new ChannelsInitializer(new NotificationManagerProxyImpl(
ContextUtils.getApplicationContext()), ContextUtils.getApplicationContext()),
ContextUtils.getApplicationContext().getResources()), ContextUtils.getApplicationContext().getResources()),
ChannelDefinitions.CHANNELS_VERSION); ChannelDefinitions.CHANNELS_VERSION);
} }
@VisibleForTesting @VisibleForTesting
ChannelsUpdater(boolean isAtLeastO, SharedPreferences sharedPreferences, ChannelsUpdater(boolean isAtLeastO, SharedPreferencesManager sharedPreferences,
ChannelsInitializer channelsInitializer, int channelsVersion) { ChannelsInitializer channelsInitializer, int channelsVersion) {
mIsAtLeastO = isAtLeastO; mIsAtLeastO = isAtLeastO;
mSharedPreferences = sharedPreferences; mSharedPreferences = sharedPreferences;
...@@ -53,7 +52,9 @@ public class ChannelsUpdater { ...@@ -53,7 +52,9 @@ public class ChannelsUpdater {
public boolean shouldUpdateChannels() { public boolean shouldUpdateChannels() {
return mIsAtLeastO return mIsAtLeastO
&& mSharedPreferences.getInt(CHANNELS_VERSION_KEY, -1) != mChannelsVersion; && mSharedPreferences.readInt(
ChromePreferenceKeys.NOTIFICATIONS_CHANNELS_VERSION, -1)
!= mChannelsVersion;
} }
public void updateChannels() { public void updateChannels() {
...@@ -76,6 +77,7 @@ public class ChannelsUpdater { ...@@ -76,6 +77,7 @@ public class ChannelsUpdater {
private void storeChannelVersionInPrefs() { private void storeChannelVersionInPrefs() {
assert mSharedPreferences != null; assert mSharedPreferences != null;
mSharedPreferences.edit().putInt(CHANNELS_VERSION_KEY, mChannelsVersion).apply(); mSharedPreferences.writeInt(
ChromePreferenceKeys.NOTIFICATIONS_CHANNELS_VERSION, mChannelsVersion);
} }
} }
...@@ -26,10 +26,11 @@ import org.junit.rules.TestRule; ...@@ -26,10 +26,11 @@ import org.junit.rules.TestRule;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.InMemorySharedPreferences;
import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.chrome.browser.notifications.NotificationManagerProxy; import org.chromium.chrome.browser.notifications.NotificationManagerProxy;
import org.chromium.chrome.browser.notifications.NotificationManagerProxyImpl; import org.chromium.chrome.browser.notifications.NotificationManagerProxyImpl;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.test.util.browser.Features; import org.chromium.chrome.test.util.browser.Features;
import org.chromium.content_public.browser.test.NativeLibraryTestRule; import org.chromium.content_public.browser.test.NativeLibraryTestRule;
...@@ -44,7 +45,7 @@ import java.util.List; ...@@ -44,7 +45,7 @@ import java.util.List;
@TargetApi(Build.VERSION_CODES.O) @TargetApi(Build.VERSION_CODES.O)
public class ChannelsUpdaterTest { public class ChannelsUpdaterTest {
private NotificationManagerProxy mNotificationManagerProxy; private NotificationManagerProxy mNotificationManagerProxy;
private InMemorySharedPreferences mMockSharedPreferences; private SharedPreferencesManager mSharedPreferences;
private ChannelsInitializer mChannelsInitializer; private ChannelsInitializer mChannelsInitializer;
private Resources mMockResources; private Resources mMockResources;
...@@ -67,7 +68,7 @@ public class ChannelsUpdaterTest { ...@@ -67,7 +68,7 @@ public class ChannelsUpdaterTest {
mChannelsInitializer = mChannelsInitializer =
new ChannelsInitializer(mNotificationManagerProxy, context.getResources()); new ChannelsInitializer(mNotificationManagerProxy, context.getResources());
mMockSharedPreferences = new InMemorySharedPreferences(); mSharedPreferences = SharedPreferencesManager.getInstance();
// Delete any channels that may already have been initialized. Cleaning up here rather than // Delete any channels that may already have been initialized. Cleaning up here rather than
// in tearDown in case tests running before these ones caused channels to be created. // in tearDown in case tests running before these ones caused channels to be created.
...@@ -84,7 +85,7 @@ public class ChannelsUpdaterTest { ...@@ -84,7 +85,7 @@ public class ChannelsUpdaterTest {
@TargetApi(Build.VERSION_CODES.O) @TargetApi(Build.VERSION_CODES.O)
public void testShouldUpdateChannels_returnsFalsePreO() { public void testShouldUpdateChannels_returnsFalsePreO() {
ChannelsUpdater updater = new ChannelsUpdater( ChannelsUpdater updater = new ChannelsUpdater(
false /* isAtLeastO */, mMockSharedPreferences, mChannelsInitializer, 0); false /* isAtLeastO */, mSharedPreferences, mChannelsInitializer, 0);
assertThat(updater.shouldUpdateChannels(), is(false)); assertThat(updater.shouldUpdateChannels(), is(false));
} }
...@@ -94,7 +95,7 @@ public class ChannelsUpdaterTest { ...@@ -94,7 +95,7 @@ public class ChannelsUpdaterTest {
@TargetApi(Build.VERSION_CODES.O) @TargetApi(Build.VERSION_CODES.O)
public void testShouldUpdateChannels_returnsTrueIfOAndNoSavedVersionInPrefs() { public void testShouldUpdateChannels_returnsTrueIfOAndNoSavedVersionInPrefs() {
ChannelsUpdater updater = new ChannelsUpdater( ChannelsUpdater updater = new ChannelsUpdater(
true /* isAtLeastO */, mMockSharedPreferences, mChannelsInitializer, 0); true /* isAtLeastO */, mSharedPreferences, mChannelsInitializer, 0);
assertThat(updater.shouldUpdateChannels(), is(true)); assertThat(updater.shouldUpdateChannels(), is(true));
} }
...@@ -103,9 +104,9 @@ public class ChannelsUpdaterTest { ...@@ -103,9 +104,9 @@ public class ChannelsUpdaterTest {
@MinAndroidSdkLevel(Build.VERSION_CODES.O) @MinAndroidSdkLevel(Build.VERSION_CODES.O)
@TargetApi(Build.VERSION_CODES.O) @TargetApi(Build.VERSION_CODES.O)
public void testShouldUpdateChannels_returnsTrueIfOAndDifferentVersionInPrefs() { public void testShouldUpdateChannels_returnsTrueIfOAndDifferentVersionInPrefs() {
mMockSharedPreferences.edit().putInt(ChannelsUpdater.CHANNELS_VERSION_KEY, 4).apply(); mSharedPreferences.writeInt(ChromePreferenceKeys.NOTIFICATIONS_CHANNELS_VERSION, 4);
ChannelsUpdater updater = new ChannelsUpdater( ChannelsUpdater updater = new ChannelsUpdater(
true /* isAtLeastO */, mMockSharedPreferences, mChannelsInitializer, 5); true /* isAtLeastO */, mSharedPreferences, mChannelsInitializer, 5);
assertThat(updater.shouldUpdateChannels(), is(true)); assertThat(updater.shouldUpdateChannels(), is(true));
} }
...@@ -114,9 +115,9 @@ public class ChannelsUpdaterTest { ...@@ -114,9 +115,9 @@ public class ChannelsUpdaterTest {
@MinAndroidSdkLevel(Build.VERSION_CODES.O) @MinAndroidSdkLevel(Build.VERSION_CODES.O)
@TargetApi(Build.VERSION_CODES.O) @TargetApi(Build.VERSION_CODES.O)
public void testShouldUpdateChannels_returnsFalseIfOAndSameVersionInPrefs() { public void testShouldUpdateChannels_returnsFalseIfOAndSameVersionInPrefs() {
mMockSharedPreferences.edit().putInt(ChannelsUpdater.CHANNELS_VERSION_KEY, 3).apply(); mSharedPreferences.writeInt(ChromePreferenceKeys.NOTIFICATIONS_CHANNELS_VERSION, 3);
ChannelsUpdater updater = new ChannelsUpdater( ChannelsUpdater updater = new ChannelsUpdater(
true /* isAtLeastO */, mMockSharedPreferences, mChannelsInitializer, 3); true /* isAtLeastO */, mSharedPreferences, mChannelsInitializer, 3);
assertThat(updater.shouldUpdateChannels(), is(false)); assertThat(updater.shouldUpdateChannels(), is(false));
} }
...@@ -126,11 +127,13 @@ public class ChannelsUpdaterTest { ...@@ -126,11 +127,13 @@ public class ChannelsUpdaterTest {
@TargetApi(Build.VERSION_CODES.O) @TargetApi(Build.VERSION_CODES.O)
public void testUpdateChannels_noopPreO() { public void testUpdateChannels_noopPreO() {
ChannelsUpdater updater = new ChannelsUpdater( ChannelsUpdater updater = new ChannelsUpdater(
false /* isAtLeastO */, mMockSharedPreferences, mChannelsInitializer, 21); false /* isAtLeastO */, mSharedPreferences, mChannelsInitializer, 21);
updater.updateChannels(); updater.updateChannels();
assertThat(getChannelsIgnoringDefault(), hasSize(0)); assertThat(getChannelsIgnoringDefault(), hasSize(0));
assertThat(mMockSharedPreferences.getInt(ChannelsUpdater.CHANNELS_VERSION_KEY, -1), is(-1)); assertThat(
mSharedPreferences.readInt(ChromePreferenceKeys.NOTIFICATIONS_CHANNELS_VERSION, -1),
is(-1));
} }
@Test @Test
...@@ -139,7 +142,7 @@ public class ChannelsUpdaterTest { ...@@ -139,7 +142,7 @@ public class ChannelsUpdaterTest {
@TargetApi(Build.VERSION_CODES.O) @TargetApi(Build.VERSION_CODES.O)
public void testUpdateChannels_createsExpectedChannelsAndUpdatesPref() { public void testUpdateChannels_createsExpectedChannelsAndUpdatesPref() {
ChannelsUpdater updater = new ChannelsUpdater( ChannelsUpdater updater = new ChannelsUpdater(
true /* isAtLeastO */, mMockSharedPreferences, mChannelsInitializer, 21); true /* isAtLeastO */, mSharedPreferences, mChannelsInitializer, 21);
updater.updateChannels(); updater.updateChannels();
assertThat(getChannelsIgnoringDefault(), hasSize((greaterThan(0)))); assertThat(getChannelsIgnoringDefault(), hasSize((greaterThan(0))));
...@@ -148,7 +151,9 @@ public class ChannelsUpdaterTest { ...@@ -148,7 +151,9 @@ public class ChannelsUpdaterTest {
ChannelDefinitions.ChannelId.DOWNLOADS, ChannelDefinitions.ChannelId.DOWNLOADS,
ChannelDefinitions.ChannelId.INCOGNITO, ChannelDefinitions.ChannelId.INCOGNITO,
ChannelDefinitions.ChannelId.MEDIA)); ChannelDefinitions.ChannelId.MEDIA));
assertThat(mMockSharedPreferences.getInt(ChannelsUpdater.CHANNELS_VERSION_KEY, -1), is(21)); assertThat(
mSharedPreferences.readInt(ChromePreferenceKeys.NOTIFICATIONS_CHANNELS_VERSION, -1),
is(21));
} }
@Test @Test
...@@ -167,7 +172,7 @@ public class ChannelsUpdaterTest { ...@@ -167,7 +172,7 @@ public class ChannelsUpdaterTest {
mNotificationManagerProxy.createNotificationChannel(channel); mNotificationManagerProxy.createNotificationChannel(channel);
} }
ChannelsUpdater updater = new ChannelsUpdater(true /* isAtLeastO */, mMockSharedPreferences, ChannelsUpdater updater = new ChannelsUpdater(true /* isAtLeastO */, mSharedPreferences,
new ChannelsInitializer(mNotificationManagerProxy, mMockResources), 12); new ChannelsInitializer(mNotificationManagerProxy, mMockResources), 12);
updater.updateChannels(); updater.updateChannels();
......
...@@ -431,6 +431,7 @@ public final class ChromePreferenceKeys { ...@@ -431,6 +431,7 @@ public final class ChromePreferenceKeys {
public static final String MEDIA_WEBRTC_NOTIFICATION_IDS = "WebRTCNotificationIds"; public static final String MEDIA_WEBRTC_NOTIFICATION_IDS = "WebRTCNotificationIds";
public static final String NOTIFICATIONS_CHANNELS_VERSION = "channels_version_key";
public static final String NOTIFICATIONS_LAST_SHOWN_NOTIFICATION_TYPE = public static final String NOTIFICATIONS_LAST_SHOWN_NOTIFICATION_TYPE =
"NotificationUmaTracker.LastShownNotificationType"; "NotificationUmaTracker.LastShownNotificationType";
public static final String NOTIFICATIONS_NEXT_TRIGGER = public static final String NOTIFICATIONS_NEXT_TRIGGER =
...@@ -836,6 +837,7 @@ public final class ChromePreferenceKeys { ...@@ -836,6 +837,7 @@ public final class ChromePreferenceKeys {
LOCALE_MANAGER_SEARCH_ENGINE_PROMO_SHOW_STATE, LOCALE_MANAGER_SEARCH_ENGINE_PROMO_SHOW_STATE,
LOCALE_MANAGER_WAS_IN_SPECIAL_LOCALE, LOCALE_MANAGER_WAS_IN_SPECIAL_LOCALE,
MEDIA_WEBRTC_NOTIFICATION_IDS, MEDIA_WEBRTC_NOTIFICATION_IDS,
NOTIFICATIONS_CHANNELS_VERSION,
NOTIFICATIONS_LAST_SHOWN_NOTIFICATION_TYPE, NOTIFICATIONS_LAST_SHOWN_NOTIFICATION_TYPE,
NOTIFICATIONS_NEXT_TRIGGER, NOTIFICATIONS_NEXT_TRIGGER,
NTP_SNIPPETS_IS_SCHEDULED, NTP_SNIPPETS_IS_SCHEDULED,
......
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