Fix support for USER_ALL in FakeSettings
If a content observer was registered to a SettingsProxy using UserHandle.USER_ALL, testing that was expecting to pass would fail. This CL fixes that by matching every user to USER_ALL observers that match the Uri. Test: atest SystemUITests Fixes: 194934707 Change-Id: I41a0eb50a2cd1700b03b372bfcc199bebd9aea35 Merged-In: I41a0eb50a2cd1700b03b372bfcc199bebd9aea35
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user