diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java b/packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java index 4f8d8666a24ae..c941d662dfd95 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java @@ -21,6 +21,7 @@ import android.content.Context; import android.database.ContentObserver; import android.os.Handler; import android.os.Looper; +import android.os.UserHandle; import android.provider.Settings; import androidx.annotation.NonNull; @@ -75,7 +76,7 @@ public abstract class SecureSettingsContentObserver { if (mListeners.size() == 1) { mContentResolver.registerContentObserver( Settings.Secure.getUriFor(mKey), /* notifyForDescendants= */ - false, mContentObserver); + false, mContentObserver, UserHandle.USER_ALL); } } @@ -100,7 +101,7 @@ public abstract class SecureSettingsContentObserver { * See {@link Settings.Secure}. */ public final String getSettingsValue() { - return Settings.Secure.getString(mContentResolver, mKey); + return Settings.Secure.getStringForUser(mContentResolver, mKey, UserHandle.USER_CURRENT); } private void updateValueChanged() { diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java index 0ab14c0a08a79..7cd43eff8e2a9 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java @@ -71,6 +71,19 @@ public class AccessibilityFloatingMenuController implements handleFloatingMenuVisibility(mIsKeyguardVisible, mBtnMode, mBtnTargets); } } + + @Override + public void onUserSwitching(int userId) { + destroyFloatingMenu(); + } + + @Override + public void onUserSwitchComplete(int userId) { + mBtnMode = mAccessibilityButtonModeObserver.getCurrentAccessibilityButtonMode(); + mBtnTargets = + mAccessibilityButtonTargetsObserver.getCurrentAccessibilityButtonTargets(); + handleFloatingMenuVisibility(mIsKeyguardVisible, mBtnMode, mBtnTargets); + } }; @Inject diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonModeObserverTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonModeObserverTest.java index 01b7adefbacf5..7aa47632965f4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonModeObserverTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonModeObserverTest.java @@ -23,6 +23,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import android.os.UserHandle; import android.provider.Settings; import android.testing.AndroidTestingRunner; @@ -55,17 +56,18 @@ public class AccessibilityButtonModeObserverTest extends SysuiTestCase { @Before public void setUp() { - Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, - Settings.Secure.ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); + Settings.Secure.ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT); mAccessibilityButtonModeObserver = new AccessibilityButtonModeObserver(mContext); } @Test public void onChange_haveListener_invokeCallback() { mAccessibilityButtonModeObserver.addListener(mListener); - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_MODE, TEST_A11Y_BTN_MODE_VALUE); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_MODE, TEST_A11Y_BTN_MODE_VALUE, + UserHandle.USER_CURRENT); mAccessibilityButtonModeObserver.mContentObserver.onChange(false); @@ -76,8 +78,9 @@ public class AccessibilityButtonModeObserverTest extends SysuiTestCase { public void onChange_noListener_noInvokeCallback() { mAccessibilityButtonModeObserver.addListener(mListener); mAccessibilityButtonModeObserver.removeListener(mListener); - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_MODE, TEST_A11Y_BTN_MODE_VALUE); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_MODE, TEST_A11Y_BTN_MODE_VALUE, + UserHandle.USER_CURRENT); mAccessibilityButtonModeObserver.mContentObserver.onChange(false); @@ -86,8 +89,9 @@ public class AccessibilityButtonModeObserverTest extends SysuiTestCase { @Test public void getCurrentAccessibilityButtonMode_expectedValue() { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_MODE, TEST_A11Y_BTN_MODE_VALUE); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_MODE, TEST_A11Y_BTN_MODE_VALUE, + UserHandle.USER_CURRENT); final int actualValue = mAccessibilityButtonModeObserver.getCurrentAccessibilityButtonMode(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserverTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserverTest.java index 1e49fc998ea4f..4145437a71b28 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserverTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserverTest.java @@ -22,6 +22,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import android.os.UserHandle; import android.provider.Settings; import android.testing.AndroidTestingRunner; @@ -60,8 +61,9 @@ public class AccessibilityButtonTargetsObserverTest extends SysuiTestCase { @Test public void onChange_haveListener_invokeCallback() { mAccessibilityButtonTargetsObserver.addListener(mListener); - Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS); + Settings.Secure.putStringForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, + UserHandle.USER_CURRENT); mAccessibilityButtonTargetsObserver.mContentObserver.onChange(false); @@ -72,8 +74,9 @@ public class AccessibilityButtonTargetsObserverTest extends SysuiTestCase { public void onChange_listenerRemoved_noInvokeCallback() { mAccessibilityButtonTargetsObserver.addListener(mListener); mAccessibilityButtonTargetsObserver.removeListener(mListener); - Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS); + Settings.Secure.putStringForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, + UserHandle.USER_CURRENT); mAccessibilityButtonTargetsObserver.mContentObserver.onChange(false); @@ -82,8 +85,9 @@ public class AccessibilityButtonTargetsObserverTest extends SysuiTestCase { @Test public void getCurrentAccessibilityButtonTargets_expectedValue() { - Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS); + Settings.Secure.putStringForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, + UserHandle.USER_CURRENT); final String actualValue = mAccessibilityButtonTargetsObserver.getCurrentAccessibilityButtonTargets(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/SecureSettingsContentObserverTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/SecureSettingsContentObserverTest.java index 5b1c441a71a1c..41fd2b3a40e01 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/SecureSettingsContentObserverTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/SecureSettingsContentObserverTest.java @@ -19,6 +19,7 @@ package com.android.systemui.accessibility; import static com.google.common.truth.Truth.assertThat; import android.content.Context; +import android.os.UserHandle; import android.provider.Settings; import android.testing.AndroidTestingRunner; @@ -55,8 +56,8 @@ public class SecureSettingsContentObserverTest extends SysuiTestCase { @Test public void checkValue() { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_MODE, 1); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_MODE, 1, UserHandle.USER_CURRENT); assertThat(mTestObserver.getSettingsValue()).isEqualTo("1"); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java index ac9aa985062d1..5b50e897e254d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java @@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import android.os.UserHandle; import android.provider.Settings; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; @@ -125,10 +126,55 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { assertThat(mController.mFloatingMenu).isNotNull(); } + @Test + public void onUserSwitching_destroyWidget() { + final int fakeUserId = 1; + enableAccessibilityFloatingMenuConfig(); + mController = setUpController(); + mController.mFloatingMenu = new AccessibilityFloatingMenu(mContext); + captureKeyguardUpdateMonitorCallback(); + + mKeyguardCallback.onUserSwitching(fakeUserId); + + assertThat(mController.mFloatingMenu).isNull(); + } + + @Test + public void onUserSwitch_onKeyguardVisibilityChangedToTrue_destroyWidget() { + final int fakeUserId = 1; + enableAccessibilityFloatingMenuConfig(); + mController = setUpController(); + mController.mFloatingMenu = new AccessibilityFloatingMenu(mContext); + captureKeyguardUpdateMonitorCallback(); + mKeyguardCallback.onUserUnlocked(); + mKeyguardCallback.onKeyguardVisibilityChanged(true); + + mKeyguardCallback.onUserSwitching(fakeUserId); + mKeyguardCallback.onUserSwitchComplete(fakeUserId); + + assertThat(mController.mFloatingMenu).isNull(); + } + + @Test + public void onUserSwitch_onKeyguardVisibilityChangedToFalse_showWidget() { + final int fakeUserId = 1; + enableAccessibilityFloatingMenuConfig(); + mController = setUpController(); + captureKeyguardUpdateMonitorCallback(); + mKeyguardCallback.onUserUnlocked(); + mKeyguardCallback.onKeyguardVisibilityChanged(false); + + mKeyguardCallback.onUserSwitching(fakeUserId); + mKeyguardCallback.onUserSwitchComplete(fakeUserId); + + assertThat(mController.mFloatingMenu).isNotNull(); + } + @Test public void onAccessibilityButtonModeChanged_floatingModeAndHasButtonTargets_showWidget() { - Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS); + Settings.Secure.putStringForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, + UserHandle.USER_CURRENT); mController = setUpController(); mController.onAccessibilityButtonModeChanged(ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); @@ -138,8 +184,8 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { @Test public void onAccessibilityButtonModeChanged_floatingModeAndNoButtonTargets_destroyWidget() { - Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, ""); + Settings.Secure.putStringForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, "", UserHandle.USER_CURRENT); mController = setUpController(); mController.onAccessibilityButtonModeChanged(ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); @@ -149,8 +195,9 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { @Test public void onAccessibilityButtonModeChanged_navBarModeAndHasButtonTargets_destroyWidget() { - Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS); + Settings.Secure.putStringForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, + UserHandle.USER_CURRENT); mController = setUpController(); mController.onAccessibilityButtonModeChanged(ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); @@ -160,8 +207,8 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { @Test public void onAccessibilityButtonModeChanged_navBarModeAndNoButtonTargets_destroyWidget() { - Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, ""); + Settings.Secure.putStringForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, "", UserHandle.USER_CURRENT); mController = setUpController(); mController.onAccessibilityButtonModeChanged(ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); @@ -171,8 +218,9 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { @Test public void onAccessibilityButtonTargetsChanged_floatingModeAndHasButtonTargets_showWidget() { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU, + UserHandle.USER_CURRENT); mController = setUpController(); mController.onAccessibilityButtonTargetsChanged(TEST_A11Y_BTN_TARGETS); @@ -182,8 +230,9 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { @Test public void onAccessibilityButtonTargetsChanged_floatingModeAndNoButtonTargets_destroyWidget() { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU, + UserHandle.USER_CURRENT); mController = setUpController(); mController.onAccessibilityButtonTargetsChanged(""); @@ -193,9 +242,9 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { @Test public void onAccessibilityButtonTargetsChanged_navBarModeAndHasButtonTargets_destroyWidget() { - Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, - ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); + ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT); mController = setUpController(); mController.onAccessibilityButtonTargetsChanged(TEST_A11Y_BTN_TARGETS); @@ -205,9 +254,9 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { @Test public void onAccessibilityButtonTargetsChanged_navBarModeAndNoButtonTargets_destroyWidget() { - Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, - ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); + ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT); mController = setUpController(); mController.onAccessibilityButtonTargetsChanged(""); @@ -225,10 +274,12 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { } private void enableAccessibilityFloatingMenuConfig() { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); - Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU, + UserHandle.USER_CURRENT); + Settings.Secure.putStringForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, + UserHandle.USER_CURRENT); } private void captureKeyguardUpdateMonitorCallback() {