Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 510e959a authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Fix support for USER_ALL in FakeSettings" into sc-v2-dev

parents 8ba74400 59a168a9
Loading
Loading
Loading
Loading
+18 −3
Original line number Original line Diff line number Diff line
@@ -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;
    }
    }


+23 −0
Original line number Original line Diff line number Diff line
@@ -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());
    }
}
}