Fix support for USER_ALL in FakeSettings am: ba405b787b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15545837

Change-Id: I0956754cf7c8e6685acf8d4d92be27c3f326f8e5
This commit is contained in:
Fabian Kozynski
2021-08-18 18:52:14 +00:00
committed by Automerger Merge Worker
2 changed files with 41 additions and 3 deletions

View File

@@ -31,6 +31,7 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
private final Map<SettingsKey, String> mValues = new HashMap<>();
private final Map<SettingsKey, List<ContentObserver>> mContentObservers =
new HashMap<>();
private final Map<String, List<ContentObserver>> mContentObserversAllUsers = new HashMap<>();
public static final Uri CONTENT_URI = Uri.parse("content://settings/fake");
@@ -55,9 +56,15 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
@Override
public void registerContentObserverForUser(Uri uri, boolean notifyDescendents,
ContentObserver settingsObserver, int userHandle) {
SettingsKey key = new SettingsKey(userHandle, uri.toString());
mContentObservers.putIfAbsent(key, new ArrayList<>());
List<ContentObserver> observers = mContentObservers.get(key);
List<ContentObserver> observers;
if (userHandle == UserHandle.USER_ALL) {
mContentObserversAllUsers.putIfAbsent(uri.toString(), new ArrayList<>());
observers = mContentObserversAllUsers.get(uri.toString());
} else {
SettingsKey key = new SettingsKey(userHandle, uri.toString());
mContentObservers.putIfAbsent(key, new ArrayList<>());
observers = mContentObservers.get(key);
}
observers.add(settingsObserver);
}
@@ -67,6 +74,10 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
List<ContentObserver> observers = mContentObservers.get(key);
observers.remove(settingsObserver);
}
for (String key : mContentObserversAllUsers.keySet()) {
List<ContentObserver> observers = mContentObserversAllUsers.get(key);
observers.remove(settingsObserver);
}
}
@Override
@@ -114,6 +125,10 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
for (ContentObserver observer : mContentObservers.getOrDefault(key, new ArrayList<>())) {
observer.dispatchChange(false, List.of(uri), userHandle);
}
for (ContentObserver observer :
mContentObserversAllUsers.getOrDefault(uri.toString(), new ArrayList<>())) {
observer.dispatchChange(false, List.of(uri), userHandle);
}
return true;
}

View File

@@ -25,6 +25,7 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import android.database.ContentObserver;
import android.os.UserHandle;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
@@ -88,6 +89,16 @@ public class FakeSettingsTest extends SysuiTestCase {
verify(mContentObserver).dispatchChange(anyBoolean(), any(Collection.class), anyInt());
}
@Test
public void testRegisterContentObserverAllUsers() {
mFakeSettings.registerContentObserverForUser(
mFakeSettings.getUriFor("cat"), false, mContentObserver, UserHandle.USER_ALL);
mFakeSettings.putString("cat", "hat");
verify(mContentObserver).dispatchChange(anyBoolean(), any(Collection.class), anyInt());
}
@Test
public void testUnregisterContentObserver() {
mFakeSettings.registerContentObserver("cat", mContentObserver);
@@ -98,4 +109,16 @@ public class FakeSettingsTest extends SysuiTestCase {
verify(mContentObserver, never()).dispatchChange(
anyBoolean(), any(Collection.class), anyInt());
}
@Test
public void testUnregisterContentObserverAllUsers() {
mFakeSettings.registerContentObserverForUser(
mFakeSettings.getUriFor("cat"), false, mContentObserver, UserHandle.USER_ALL);
mFakeSettings.unregisterContentObserver(mContentObserver);
mFakeSettings.putString("cat", "hat");
verify(mContentObserver, never()).dispatchChange(
anyBoolean(), any(Collection.class), anyInt());
}
}