Loading res/xml/accessibility_settings.xml +2 −1 Original line number Diff line number Diff line Loading @@ -97,7 +97,8 @@ <SwitchPreference android:key="toggle_lock_screen_rotation_preference" android:title="@string/accelerometer_title" android:persistent="false"/> android:persistent="false" settings:controller="com.android.settings.accessibility.LockScreenRotationPreferenceController"/> <ListPreference android:key="select_long_press_timeout_preference" Loading src/com/android/settings/accessibility/AccessibilitySettings.java +8 −40 Original line number Diff line number Diff line Loading @@ -55,8 +55,6 @@ import androidx.preference.SwitchPreference; import com.android.internal.accessibility.AccessibilityShortcutController; import com.android.internal.content.PackageMonitor; import com.android.internal.view.RotationPolicy; import com.android.internal.view.RotationPolicy.RotationPolicyListener; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; Loading Loading @@ -212,13 +210,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements private final SettingsContentObserver mSettingsContentObserver; private final RotationPolicyListener mRotationPolicyListener = new RotationPolicyListener() { @Override public void onChange() { updateLockScreenRotationCheckbox(); } }; private final Map<String, PreferenceCategory> mCategoryToPrefCategoryMap = new ArrayMap<>(); private final Map<Preference, PreferenceCategory> mServicePreferenceToPreferenceCategoryMap = Loading Loading @@ -249,6 +240,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements private DarkUIPreferenceController mDarkUIPreferenceController; private LiveCaptionPreferenceController mLiveCaptionPreferenceController; private LockScreenRotationPreferenceController mLockScreenRotationPreferenceController; private int mLongPressTimeoutDefault; private DevicePolicyManager mDpm; Loading Loading @@ -318,20 +311,12 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false); mSettingsContentObserver.register(getContentResolver()); if (RotationPolicy.isRotationSupported(getActivity())) { RotationPolicy.registerRotationPolicyListener(getActivity(), mRotationPolicyListener); } } @Override public void onPause() { mSettingsPackageMonitor.unregister(); mSettingsContentObserver.unregister(getContentResolver()); if (RotationPolicy.isRotationSupported(getActivity())) { RotationPolicy.unregisterRotationPolicyListener(getActivity(), mRotationPolicyListener); } super.onPause(); } Loading Loading @@ -359,9 +344,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } else if (mTogglePowerButtonEndsCallPreference == preference) { handleTogglePowerButtonEndsCallPreferenceClick(); return true; } else if (mToggleLockScreenRotationPreference == preference) { handleLockScreenRotationPreferenceClick(); return true; } else if (mToggleLargePointerIconPreference == preference) { handleToggleLargePointerIconPreferenceClick(); return true; Loading Loading @@ -415,11 +397,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF)); } private void handleLockScreenRotationPreferenceClick() { RotationPolicy.setRotationLockForAccessibility(getActivity(), !mToggleLockScreenRotationPreference.isChecked()); } private void handleToggleLargePointerIconPreferenceClick() { Settings.Secure.putInt(getContentResolver(), Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON, Loading Loading @@ -465,12 +442,11 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } // Lock screen rotation. mToggleLockScreenRotationPreference = (SwitchPreference) findPreference(TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE); if (!RotationPolicy.isRotationSupported(getActivity())) { mCategoryToPrefCategoryMap.get(CATEGORY_INTERACTION_CONTROL) .removePreference(mToggleLockScreenRotationPreference); } mToggleLockScreenRotationPreference = findPreference( TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE); mLockScreenRotationPreferenceController = new LockScreenRotationPreferenceController( getContext(), TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE); mLockScreenRotationPreferenceController.displayPreference(getPreferenceScreen()); // Large pointer icon. mToggleLargePointerIconPreference = Loading Loading @@ -765,7 +741,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } // Auto-rotate screen updateLockScreenRotationCheckbox(); mLockScreenRotationPreferenceController.updateState(mToggleLockScreenRotationPreference); // Large pointer icon. mToggleLargePointerIconPreference.setChecked(Settings.Secure.getInt(getContentResolver(), Loading Loading @@ -941,14 +917,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } } private void updateLockScreenRotationCheckbox() { Context context = getActivity(); if (context != null) { mToggleLockScreenRotationPreference.setChecked( !RotationPolicy.isRotationLocked(context)); } } private void updateDisableAnimationsToggle() { boolean allAnimationsDisabled = true; for (String animationSetting : TOGGLE_ANIMATION_TARGETS) { Loading src/com/android/settings/accessibility/LockScreenRotationPreferenceController.java 0 → 100644 +91 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.accessibility; import android.content.Context; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.internal.view.RotationPolicy; import com.android.internal.view.RotationPolicy.RotationPolicyListener; import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; public class LockScreenRotationPreferenceController extends TogglePreferenceController implements LifecycleObserver, OnPause, OnResume { private Preference mPreference; private RotationPolicyListener mRotationPolicyListener; public LockScreenRotationPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } /** * Returns true if rotation lock is enabled. */ @Override public boolean isChecked() { return !RotationPolicy.isRotationLocked(mContext); } /** * Enables or disables screen rotation lock from Accessibility settings. If rotation is locked * for accessibility, the toggle in Display settings is hidden to avoid confusion. */ @Override public boolean setChecked(boolean isChecked) { RotationPolicy.setRotationLockForAccessibility(mContext, !isChecked); return true; } @Override public int getAvailabilityStatus() { return RotationPolicy.isRotationSupported(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override public void onPause() { if (mRotationPolicyListener != null) { RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener); } } @Override public void onResume() { if (mRotationPolicyListener == null) { mRotationPolicyListener = new RotationPolicyListener() { @Override public void onChange() { if (mPreference != null) { updateState(mPreference); } } }; } RotationPolicy.registerRotationPolicyListener(mContext, mRotationPolicyListener); } @Override public void displayPreference(PreferenceScreen screen) { mPreference = screen.findPreference(getPreferenceKey()); super.displayPreference(screen); } } tests/robotests/src/com/android/settings/accessibility/LockScreenRotationPreferenceControllerTest.java 0 → 100644 +107 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.accessibility; import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.os.UserHandle; import android.provider.Settings; import androidx.preference.SwitchPreference; import com.android.internal.view.RotationPolicy; import com.android.settings.core.BasePreferenceController; import com.android.settings.testutils.shadow.ShadowRotationPolicy; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) public class LockScreenRotationPreferenceControllerTest { private Context mContext; private SwitchPreference mPreference; private LockScreenRotationPreferenceController mController; @Before public void setUp() { mContext = RuntimeEnvironment.application; mPreference = new SwitchPreference(mContext); mController = new LockScreenRotationPreferenceController(mContext, "lock_screen"); } @Test @Config(shadows = {ShadowRotationPolicy.class}) public void getAvailabilityStatus_supportedRotation_shouldReturnAvailable() { ShadowRotationPolicy.setRotationSupported(true /* supported */); assertThat(mController.getAvailabilityStatus()).isEqualTo( BasePreferenceController.AVAILABLE); } @Test @Config(shadows = {ShadowRotationPolicy.class}) public void getAvailabilityStatus_unsupportedRotation_shouldReturnUnsupportedOnDevice() { ShadowRotationPolicy.setRotationSupported(false /* supported */); assertThat(mController.getAvailabilityStatus()).isEqualTo( BasePreferenceController.UNSUPPORTED_ON_DEVICE); } @Test @Config(shadows = {ShadowRotationPolicy.class}) public void setChecked_enabled() { mController.setChecked(true /* isChecked */); assertThat(mController.isChecked()).isTrue(); assertThat(RotationPolicy.isRotationLocked(mContext)).isFalse(); } @Test @Config(shadows = {ShadowRotationPolicy.class}) public void setChecked_disabled() { mController.setChecked(false /* isChecked */); assertThat(mController.isChecked()).isFalse(); assertThat(RotationPolicy.isRotationLocked(mContext)).isTrue(); } @Test public void updateState_settingIsOn_shouldTurnOnToggle() { Settings.System.putIntForUser(mContext.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 1, UserHandle.USER_CURRENT); mController.updateState(mPreference); assertThat(mPreference.isChecked()).isTrue(); } @Test public void updateState_settingIsOff_shouldTurnOffToggle() { Settings.System.putIntForUser(mContext.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0, UserHandle.USER_CURRENT); mController.updateState(mPreference); assertThat(mPreference.isChecked()).isFalse(); } } tests/robotests/src/com/android/settings/testutils/shadow/ShadowRotationPolicy.java +5 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,11 @@ public class ShadowRotationPolicy { rotationLockEnabled = enabled; } @Implementation protected static void setRotationLockForAccessibility(Context context, final boolean enabled) { rotationLockEnabled = enabled; } @Implementation protected static boolean isRotationLocked(Context context) { return rotationLockEnabled; Loading Loading
res/xml/accessibility_settings.xml +2 −1 Original line number Diff line number Diff line Loading @@ -97,7 +97,8 @@ <SwitchPreference android:key="toggle_lock_screen_rotation_preference" android:title="@string/accelerometer_title" android:persistent="false"/> android:persistent="false" settings:controller="com.android.settings.accessibility.LockScreenRotationPreferenceController"/> <ListPreference android:key="select_long_press_timeout_preference" Loading
src/com/android/settings/accessibility/AccessibilitySettings.java +8 −40 Original line number Diff line number Diff line Loading @@ -55,8 +55,6 @@ import androidx.preference.SwitchPreference; import com.android.internal.accessibility.AccessibilityShortcutController; import com.android.internal.content.PackageMonitor; import com.android.internal.view.RotationPolicy; import com.android.internal.view.RotationPolicy.RotationPolicyListener; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; Loading Loading @@ -212,13 +210,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements private final SettingsContentObserver mSettingsContentObserver; private final RotationPolicyListener mRotationPolicyListener = new RotationPolicyListener() { @Override public void onChange() { updateLockScreenRotationCheckbox(); } }; private final Map<String, PreferenceCategory> mCategoryToPrefCategoryMap = new ArrayMap<>(); private final Map<Preference, PreferenceCategory> mServicePreferenceToPreferenceCategoryMap = Loading Loading @@ -249,6 +240,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements private DarkUIPreferenceController mDarkUIPreferenceController; private LiveCaptionPreferenceController mLiveCaptionPreferenceController; private LockScreenRotationPreferenceController mLockScreenRotationPreferenceController; private int mLongPressTimeoutDefault; private DevicePolicyManager mDpm; Loading Loading @@ -318,20 +311,12 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false); mSettingsContentObserver.register(getContentResolver()); if (RotationPolicy.isRotationSupported(getActivity())) { RotationPolicy.registerRotationPolicyListener(getActivity(), mRotationPolicyListener); } } @Override public void onPause() { mSettingsPackageMonitor.unregister(); mSettingsContentObserver.unregister(getContentResolver()); if (RotationPolicy.isRotationSupported(getActivity())) { RotationPolicy.unregisterRotationPolicyListener(getActivity(), mRotationPolicyListener); } super.onPause(); } Loading Loading @@ -359,9 +344,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } else if (mTogglePowerButtonEndsCallPreference == preference) { handleTogglePowerButtonEndsCallPreferenceClick(); return true; } else if (mToggleLockScreenRotationPreference == preference) { handleLockScreenRotationPreferenceClick(); return true; } else if (mToggleLargePointerIconPreference == preference) { handleToggleLargePointerIconPreferenceClick(); return true; Loading Loading @@ -415,11 +397,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF)); } private void handleLockScreenRotationPreferenceClick() { RotationPolicy.setRotationLockForAccessibility(getActivity(), !mToggleLockScreenRotationPreference.isChecked()); } private void handleToggleLargePointerIconPreferenceClick() { Settings.Secure.putInt(getContentResolver(), Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON, Loading Loading @@ -465,12 +442,11 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } // Lock screen rotation. mToggleLockScreenRotationPreference = (SwitchPreference) findPreference(TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE); if (!RotationPolicy.isRotationSupported(getActivity())) { mCategoryToPrefCategoryMap.get(CATEGORY_INTERACTION_CONTROL) .removePreference(mToggleLockScreenRotationPreference); } mToggleLockScreenRotationPreference = findPreference( TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE); mLockScreenRotationPreferenceController = new LockScreenRotationPreferenceController( getContext(), TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE); mLockScreenRotationPreferenceController.displayPreference(getPreferenceScreen()); // Large pointer icon. mToggleLargePointerIconPreference = Loading Loading @@ -765,7 +741,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } // Auto-rotate screen updateLockScreenRotationCheckbox(); mLockScreenRotationPreferenceController.updateState(mToggleLockScreenRotationPreference); // Large pointer icon. mToggleLargePointerIconPreference.setChecked(Settings.Secure.getInt(getContentResolver(), Loading Loading @@ -941,14 +917,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } } private void updateLockScreenRotationCheckbox() { Context context = getActivity(); if (context != null) { mToggleLockScreenRotationPreference.setChecked( !RotationPolicy.isRotationLocked(context)); } } private void updateDisableAnimationsToggle() { boolean allAnimationsDisabled = true; for (String animationSetting : TOGGLE_ANIMATION_TARGETS) { Loading
src/com/android/settings/accessibility/LockScreenRotationPreferenceController.java 0 → 100644 +91 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.accessibility; import android.content.Context; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.internal.view.RotationPolicy; import com.android.internal.view.RotationPolicy.RotationPolicyListener; import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; public class LockScreenRotationPreferenceController extends TogglePreferenceController implements LifecycleObserver, OnPause, OnResume { private Preference mPreference; private RotationPolicyListener mRotationPolicyListener; public LockScreenRotationPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } /** * Returns true if rotation lock is enabled. */ @Override public boolean isChecked() { return !RotationPolicy.isRotationLocked(mContext); } /** * Enables or disables screen rotation lock from Accessibility settings. If rotation is locked * for accessibility, the toggle in Display settings is hidden to avoid confusion. */ @Override public boolean setChecked(boolean isChecked) { RotationPolicy.setRotationLockForAccessibility(mContext, !isChecked); return true; } @Override public int getAvailabilityStatus() { return RotationPolicy.isRotationSupported(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override public void onPause() { if (mRotationPolicyListener != null) { RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener); } } @Override public void onResume() { if (mRotationPolicyListener == null) { mRotationPolicyListener = new RotationPolicyListener() { @Override public void onChange() { if (mPreference != null) { updateState(mPreference); } } }; } RotationPolicy.registerRotationPolicyListener(mContext, mRotationPolicyListener); } @Override public void displayPreference(PreferenceScreen screen) { mPreference = screen.findPreference(getPreferenceKey()); super.displayPreference(screen); } }
tests/robotests/src/com/android/settings/accessibility/LockScreenRotationPreferenceControllerTest.java 0 → 100644 +107 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.accessibility; import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.os.UserHandle; import android.provider.Settings; import androidx.preference.SwitchPreference; import com.android.internal.view.RotationPolicy; import com.android.settings.core.BasePreferenceController; import com.android.settings.testutils.shadow.ShadowRotationPolicy; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) public class LockScreenRotationPreferenceControllerTest { private Context mContext; private SwitchPreference mPreference; private LockScreenRotationPreferenceController mController; @Before public void setUp() { mContext = RuntimeEnvironment.application; mPreference = new SwitchPreference(mContext); mController = new LockScreenRotationPreferenceController(mContext, "lock_screen"); } @Test @Config(shadows = {ShadowRotationPolicy.class}) public void getAvailabilityStatus_supportedRotation_shouldReturnAvailable() { ShadowRotationPolicy.setRotationSupported(true /* supported */); assertThat(mController.getAvailabilityStatus()).isEqualTo( BasePreferenceController.AVAILABLE); } @Test @Config(shadows = {ShadowRotationPolicy.class}) public void getAvailabilityStatus_unsupportedRotation_shouldReturnUnsupportedOnDevice() { ShadowRotationPolicy.setRotationSupported(false /* supported */); assertThat(mController.getAvailabilityStatus()).isEqualTo( BasePreferenceController.UNSUPPORTED_ON_DEVICE); } @Test @Config(shadows = {ShadowRotationPolicy.class}) public void setChecked_enabled() { mController.setChecked(true /* isChecked */); assertThat(mController.isChecked()).isTrue(); assertThat(RotationPolicy.isRotationLocked(mContext)).isFalse(); } @Test @Config(shadows = {ShadowRotationPolicy.class}) public void setChecked_disabled() { mController.setChecked(false /* isChecked */); assertThat(mController.isChecked()).isFalse(); assertThat(RotationPolicy.isRotationLocked(mContext)).isTrue(); } @Test public void updateState_settingIsOn_shouldTurnOnToggle() { Settings.System.putIntForUser(mContext.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 1, UserHandle.USER_CURRENT); mController.updateState(mPreference); assertThat(mPreference.isChecked()).isTrue(); } @Test public void updateState_settingIsOff_shouldTurnOffToggle() { Settings.System.putIntForUser(mContext.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0, UserHandle.USER_CURRENT); mController.updateState(mPreference); assertThat(mPreference.isChecked()).isFalse(); } }
tests/robotests/src/com/android/settings/testutils/shadow/ShadowRotationPolicy.java +5 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,11 @@ public class ShadowRotationPolicy { rotationLockEnabled = enabled; } @Implementation protected static void setRotationLockForAccessibility(Context context, final boolean enabled) { rotationLockEnabled = enabled; } @Implementation protected static boolean isRotationLocked(Context context) { return rotationLockEnabled; Loading