summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java105
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonModeObserverTest.java20
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserverTest.java16
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/SecureSettingsContentObserverTest.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java171
7 files changed, 231 insertions, 97 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java b/packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java
index 4f8d8666a24a..c941d662dfd9 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<T> {
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<T> {
* 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 112e9cae0a21..7cd43eff8e2a 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java
@@ -20,11 +20,12 @@ import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATIN
import android.content.Context;
import android.text.TextUtils;
-import android.view.accessibility.AccessibilityManager;
import androidx.annotation.MainThread;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
import com.android.systemui.accessibility.AccessibilityButtonModeObserver.AccessibilityButtonMode;
import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
@@ -37,41 +38,65 @@ import javax.inject.Inject;
@SysUISingleton
public class AccessibilityFloatingMenuController implements
AccessibilityButtonModeObserver.ModeChangedListener,
- AccessibilityButtonTargetsObserver.TargetsChangedListener,
- AccessibilityManager.AccessibilityStateChangeListener {
+ AccessibilityButtonTargetsObserver.TargetsChangedListener {
private final Context mContext;
- private final AccessibilityManager mAccessibilityManager;
private final AccessibilityButtonModeObserver mAccessibilityButtonModeObserver;
private final AccessibilityButtonTargetsObserver mAccessibilityButtonTargetsObserver;
+ private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@VisibleForTesting
IAccessibilityFloatingMenu mFloatingMenu;
private int mBtnMode;
private String mBtnTargets;
+ private boolean mIsKeyguardVisible;
+ private boolean mIsAccessibilityManagerServiceReady;
+
+ @VisibleForTesting
+ final KeyguardUpdateMonitorCallback mKeyguardCallback = new KeyguardUpdateMonitorCallback() {
+ // Accessibility floating menu needs to retrieve information from
+ // AccessibilityManagerService, and it would be ready before onUserUnlocked().
+ @Override
+ public void onUserUnlocked() {
+ mIsAccessibilityManagerServiceReady = true;
+ handleFloatingMenuVisibility(mIsKeyguardVisible, mBtnMode, mBtnTargets);
+ }
+
+ // Keyguard state would be changed before AccessibilityManagerService is ready to retrieve,
+ // need to wait until receive onUserUnlocked().
+ @Override
+ public void onKeyguardVisibilityChanged(boolean showing) {
+ mIsKeyguardVisible = showing;
+ if (mIsAccessibilityManagerServiceReady) {
+ 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
public AccessibilityFloatingMenuController(Context context,
AccessibilityButtonTargetsObserver accessibilityButtonTargetsObserver,
- AccessibilityButtonModeObserver accessibilityButtonModeObserver) {
+ AccessibilityButtonModeObserver accessibilityButtonModeObserver,
+ KeyguardUpdateMonitor keyguardUpdateMonitor) {
mContext = context;
mAccessibilityButtonTargetsObserver = accessibilityButtonTargetsObserver;
mAccessibilityButtonModeObserver = accessibilityButtonModeObserver;
- mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class);
-
- mAccessibilityButtonModeObserver.addListener(this);
- mAccessibilityButtonTargetsObserver.addListener(this);
- mBtnMode = mAccessibilityButtonModeObserver.getCurrentAccessibilityButtonMode();
- mBtnTargets = mAccessibilityButtonTargetsObserver.getCurrentAccessibilityButtonTargets();
+ mKeyguardUpdateMonitor = keyguardUpdateMonitor;
- // Accessibility floating menu widget needs accessibility service to work, but system
- // accessibility might be unavailable during the phone get booted, hence it needs to wait
- // for accessibility manager callback to work.
- mAccessibilityManager.addAccessibilityStateChangeListener(this);
- if (mAccessibilityManager.isEnabled()) {
- handleFloatingMenuVisibility(mBtnMode, mBtnTargets);
- mAccessibilityManager.removeAccessibilityStateChangeListener(this);
- }
+ init();
}
/**
@@ -82,7 +107,7 @@ public class AccessibilityFloatingMenuController implements
@Override
public void onAccessibilityButtonModeChanged(@AccessibilityButtonMode int mode) {
mBtnMode = mode;
- handleFloatingMenuVisibility(mBtnMode, mBtnTargets);
+ handleFloatingMenuVisibility(mIsKeyguardVisible, mBtnMode, mBtnTargets);
}
/**
@@ -94,27 +119,39 @@ public class AccessibilityFloatingMenuController implements
@Override
public void onAccessibilityButtonTargetsChanged(String targets) {
mBtnTargets = targets;
- handleFloatingMenuVisibility(mBtnMode, mBtnTargets);
+ handleFloatingMenuVisibility(mIsKeyguardVisible, mBtnMode, mBtnTargets);
+ }
+
+ private void init() {
+ mIsKeyguardVisible = false;
+ mIsAccessibilityManagerServiceReady = false;
+ mBtnMode = mAccessibilityButtonModeObserver.getCurrentAccessibilityButtonMode();
+ mBtnTargets = mAccessibilityButtonTargetsObserver.getCurrentAccessibilityButtonTargets();
+ registerContentObservers();
+ }
+
+ private void registerContentObservers() {
+ mAccessibilityButtonModeObserver.addListener(this);
+ mAccessibilityButtonTargetsObserver.addListener(this);
+ mKeyguardUpdateMonitor.registerCallback(mKeyguardCallback);
}
/**
- * Handles visibility of the accessibility floating menu when system accessibility state
- * changes.
- * If system accessibility become available onAccessibilityStateChanged(true), then we don't
- * need to listen to this listener anymore.
+ * Handles the accessibility floating menu visibility with the given values.
*
- * @param enabled Whether accessibility is enabled.
+ * @param keyguardVisible the keyguard visibility status. Not show the
+ * {@link AccessibilityFloatingMenu} when keyguard appears.
+ * @param mode accessibility button mode {@link AccessibilityButtonMode}
+ * @param targets accessibility button list; it should comes from
+ * {@link android.provider.Settings.Secure#ACCESSIBILITY_BUTTON_TARGETS}.
*/
- @Override
- public void onAccessibilityStateChanged(boolean enabled) {
- if (enabled) {
- handleFloatingMenuVisibility(mBtnMode, mBtnTargets);
+ private void handleFloatingMenuVisibility(boolean keyguardVisible,
+ @AccessibilityButtonMode int mode, String targets) {
+ if (keyguardVisible) {
+ destroyFloatingMenu();
+ return;
}
- mAccessibilityManager.removeAccessibilityStateChangeListener(this);
- }
-
- private void handleFloatingMenuVisibility(@AccessibilityButtonMode int mode, String targets) {
if (shouldShowFloatingMenu(mode, targets)) {
showFloatingMenu();
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
index 187caf9c2b2e..746621dfda27 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
@@ -41,6 +41,7 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.util.NotificationMessagingUtil;
import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.ViewMediatorCallback;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.systemui.Prefs;
@@ -263,9 +264,10 @@ public class DependencyProvider {
@SysUISingleton
public AccessibilityFloatingMenuController provideAccessibilityFloatingMenuController(
Context context, AccessibilityButtonTargetsObserver accessibilityButtonTargetsObserver,
- AccessibilityButtonModeObserver accessibilityButtonModeObserver) {
+ AccessibilityButtonModeObserver accessibilityButtonModeObserver,
+ KeyguardUpdateMonitor keyguardUpdateMonitor) {
return new AccessibilityFloatingMenuController(context, accessibilityButtonTargetsObserver,
- accessibilityButtonModeObserver);
+ accessibilityButtonModeObserver, keyguardUpdateMonitor);
}
/** */
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 01b7adefbacf..7aa47632965f 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 1e49fc998ea4..4145437a71b2 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 5b1c441a71a1..41fd2b3a40e0 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 a83f0382ba7b..5b50e897e254 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
@@ -24,15 +24,16 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import android.os.UserHandle;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
-import android.view.accessibility.AccessibilityManager;
import androidx.test.filters.SmallTest;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
@@ -41,7 +42,8 @@ import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Mock;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@@ -56,11 +58,13 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
@Rule
public MockitoRule mockito = MockitoJUnit.rule();
+ private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private AccessibilityFloatingMenuController mController;
private AccessibilityButtonTargetsObserver mTargetsObserver;
private AccessibilityButtonModeObserver mModeObserver;
- @Mock
- private AccessibilityManager mMockA11yManager;
+ @Captor
+ private ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardCallbackCaptor;
+ private KeyguardUpdateMonitorCallback mKeyguardCallback;
@Test
public void initController_registerListeners() {
@@ -70,43 +74,107 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
any(AccessibilityButtonTargetsObserver.TargetsChangedListener.class));
verify(mModeObserver).addListener(
any(AccessibilityButtonModeObserver.ModeChangedListener.class));
- verify(mMockA11yManager).addAccessibilityStateChangeListener(any(
- AccessibilityManager.AccessibilityStateChangeListener.class));
+ verify(mKeyguardUpdateMonitor).registerCallback(any(KeyguardUpdateMonitorCallback.class));
}
@Test
- public void initController_accessibilityManagerEnabled_showWidget() {
- 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);
- when(mMockA11yManager.isEnabled()).thenReturn(true);
+ public void onUserUnlocked_keyguardNotShow_showWidget() {
+ enableAccessibilityFloatingMenuConfig();
+ mController = setUpController();
+ captureKeyguardUpdateMonitorCallback();
+ mKeyguardCallback.onKeyguardVisibilityChanged(false);
+
+ mKeyguardCallback.onUserUnlocked();
+
+ assertThat(mController.mFloatingMenu).isNotNull();
+ }
+
+ @Test
+ public void onUserUnlocked_keyguardShowing_destroyWidget() {
+ enableAccessibilityFloatingMenuConfig();
+ mController = setUpController();
+ captureKeyguardUpdateMonitorCallback();
+ mKeyguardCallback.onKeyguardVisibilityChanged(true);
+
+ mKeyguardCallback.onUserUnlocked();
+
+ assertThat(mController.mFloatingMenu).isNull();
+ }
+
+ @Test
+ public void onKeyguardVisibilityChanged_showing_destroyWidget() {
+ enableAccessibilityFloatingMenuConfig();
+ mController = setUpController();
+ mController.mFloatingMenu = new AccessibilityFloatingMenu(mContext);
+ captureKeyguardUpdateMonitorCallback();
+ mKeyguardCallback.onUserUnlocked();
+ mKeyguardCallback.onKeyguardVisibilityChanged(true);
+
+ assertThat(mController.mFloatingMenu).isNull();
+ }
+
+ @Test
+ public void onKeyguardVisibilityChanged_notShow_showWidget() {
+ enableAccessibilityFloatingMenuConfig();
mController = setUpController();
+ captureKeyguardUpdateMonitorCallback();
+ mKeyguardCallback.onUserUnlocked();
+
+ mKeyguardCallback.onKeyguardVisibilityChanged(false);
assertThat(mController.mFloatingMenu).isNotNull();
- verify(mMockA11yManager).removeAccessibilityStateChangeListener(mController);
}
@Test
- public void initController_accessibilityManagerDisabledThenCallbackToEnabled_showWidget() {
- 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);
- when(mMockA11yManager.isEnabled()).thenReturn(false);
+ 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.onAccessibilityStateChanged(true);
+ 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();
- verify(mMockA11yManager).removeAccessibilityStateChangeListener(mController);
}
@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);
@@ -116,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);
@@ -126,9 +194,10 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
}
@Test
- public void onAccessibilityButtonModeChanged_navBarModeAndHasButtonTargets_showWidget() {
- Settings.Secure.putString(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS);
+ public void onAccessibilityButtonModeChanged_navBarModeAndHasButtonTargets_destroyWidget() {
+ 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);
@@ -138,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);
@@ -149,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);
@@ -160,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("");
@@ -170,10 +241,10 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
}
@Test
- public void onAccessibilityButtonTargetsChanged_navBarModeAndHasButtonTargets_showWidget() {
- Settings.Secure.putInt(mContext.getContentResolver(),
+ public void onAccessibilityButtonTargetsChanged_navBarModeAndHasButtonTargets_destroyWidget() {
+ 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);
@@ -182,10 +253,10 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
}
@Test
- public void onAccessibilityButtonTargetsChanged_buttonModeAndNoButtonTargets_destroyWidget() {
- Settings.Secure.putInt(mContext.getContentResolver(),
+ public void onAccessibilityButtonTargetsChanged_navBarModeAndNoButtonTargets_destroyWidget() {
+ 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("");
@@ -196,9 +267,23 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase {
private AccessibilityFloatingMenuController setUpController() {
mTargetsObserver = spy(Dependency.get(AccessibilityButtonTargetsObserver.class));
mModeObserver = spy(Dependency.get(AccessibilityButtonModeObserver.class));
- mContext.addMockSystemService(AccessibilityManager.class, mMockA11yManager);
+ mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class);
return new AccessibilityFloatingMenuController(mContext, mTargetsObserver,
- mModeObserver);
+ mModeObserver, mKeyguardUpdateMonitor);
+ }
+
+ private void enableAccessibilityFloatingMenuConfig() {
+ 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() {
+ verify(mKeyguardUpdateMonitor).registerCallback(mKeyguardCallbackCaptor.capture());
+ mKeyguardCallback = mKeyguardCallbackCaptor.getValue();
}
}