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
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, String> mValues = new HashMap<>();
|
||||||
private final Map<SettingsKey, List<ContentObserver>> mContentObservers =
|
private final Map<SettingsKey, List<ContentObserver>> mContentObservers =
|
||||||
new HashMap<>();
|
new HashMap<>();
|
||||||
|
private final Map<String, List<ContentObserver>> mContentObserversAllUsers = new HashMap<>();
|
||||||
|
|
||||||
public static final Uri CONTENT_URI = Uri.parse("content://settings/fake");
|
public static final Uri CONTENT_URI = Uri.parse("content://settings/fake");
|
||||||
|
|
||||||
@@ -55,9 +56,15 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
|
|||||||
@Override
|
@Override
|
||||||
public void registerContentObserverForUser(Uri uri, boolean notifyDescendents,
|
public void registerContentObserverForUser(Uri uri, boolean notifyDescendents,
|
||||||
ContentObserver settingsObserver, int userHandle) {
|
ContentObserver settingsObserver, int userHandle) {
|
||||||
|
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());
|
SettingsKey key = new SettingsKey(userHandle, uri.toString());
|
||||||
mContentObservers.putIfAbsent(key, new ArrayList<>());
|
mContentObservers.putIfAbsent(key, new ArrayList<>());
|
||||||
List<ContentObserver> observers = mContentObservers.get(key);
|
observers = mContentObservers.get(key);
|
||||||
|
}
|
||||||
observers.add(settingsObserver);
|
observers.add(settingsObserver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,6 +74,10 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
|
|||||||
List<ContentObserver> observers = mContentObservers.get(key);
|
List<ContentObserver> observers = mContentObservers.get(key);
|
||||||
observers.remove(settingsObserver);
|
observers.remove(settingsObserver);
|
||||||
}
|
}
|
||||||
|
for (String key : mContentObserversAllUsers.keySet()) {
|
||||||
|
List<ContentObserver> observers = mContentObserversAllUsers.get(key);
|
||||||
|
observers.remove(settingsObserver);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -114,6 +125,10 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
|
|||||||
for (ContentObserver observer : mContentObservers.getOrDefault(key, new ArrayList<>())) {
|
for (ContentObserver observer : mContentObservers.getOrDefault(key, new ArrayList<>())) {
|
||||||
observer.dispatchChange(false, List.of(uri), userHandle);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.never;
|
|||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
|
import android.os.UserHandle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
|
|
||||||
@@ -88,6 +89,16 @@ public class FakeSettingsTest extends SysuiTestCase {
|
|||||||
verify(mContentObserver).dispatchChange(anyBoolean(), any(Collection.class), anyInt());
|
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
|
@Test
|
||||||
public void testUnregisterContentObserver() {
|
public void testUnregisterContentObserver() {
|
||||||
mFakeSettings.registerContentObserver("cat", mContentObserver);
|
mFakeSettings.registerContentObserver("cat", mContentObserver);
|
||||||
@@ -98,4 +109,16 @@ public class FakeSettingsTest extends SysuiTestCase {
|
|||||||
verify(mContentObserver, never()).dispatchChange(
|
verify(mContentObserver, never()).dispatchChange(
|
||||||
anyBoolean(), any(Collection.class), anyInt());
|
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