Loading packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java +6 −6 Original line number Diff line number Diff line Loading @@ -59,8 +59,8 @@ import android.widget.TextView; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; import com.android.systemui.res.R; import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView; import com.android.systemui.res.R; import com.android.systemui.util.settings.SecureSettings; import java.lang.annotation.Retention; Loading Loading @@ -671,17 +671,17 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest } private Rect getDraggableWindowBounds() { final int layoutMargin = mContext.getResources().getDimensionPixelSize( R.dimen.magnification_switch_button_margin); final WindowMetrics windowMetrics = mWindowManager.getCurrentWindowMetrics(); final Insets windowInsets = windowMetrics.getWindowInsets().getInsetsIgnoringVisibility( WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout()); // re-measure the settings panel view so that we can get the correct view size to inset int unspecificSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); mSettingView.measure(unspecificSpec, unspecificSpec); final Rect boundRect = new Rect(windowMetrics.getBounds()); boundRect.offsetTo(0, 0); boundRect.inset(0, 0, mParams.width, mParams.height); boundRect.inset(0, 0, mSettingView.getMeasuredWidth(), mSettingView.getMeasuredHeight()); boundRect.inset(windowInsets); boundRect.inset(layoutMargin, layoutMargin); return boundRect; } Loading packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java +40 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPAB import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; import static android.view.WindowInsets.Type.systemBars; import static com.google.common.truth.Truth.assertThat; Loading @@ -42,6 +43,7 @@ import android.annotation.IdRes; import android.content.Context; import android.content.pm.ActivityInfo; import android.database.ContentObserver; import android.graphics.Insets; import android.graphics.Rect; import android.os.UserHandle; import android.provider.Settings; Loading @@ -49,6 +51,7 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.View; import android.view.ViewGroup; import android.view.WindowInsets; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; import android.widget.Button; Loading @@ -59,10 +62,10 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView; import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView.OnSeekBarWithIconButtonsChangeListener; import com.android.systemui.res.R; import com.android.systemui.util.settings.SecureSettings; import org.junit.After; Loading Loading @@ -313,6 +316,42 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { assertThat(magnifierMediumButton.isSelected()).isTrue(); } @Test public void onWindowBoundsChanged_updateDraggableWindowBounds() { setupMagnificationCapabilityAndMode( /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL, /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); mWindowMagnificationSettings.showSettingPanel(); // get the measured panel view frame size final int panelWidth = mSettingView.getMeasuredWidth(); final int panelHeight = mSettingView.getMeasuredHeight(); final Rect testWindowBounds = new Rect(10, 20, 1010, 2020); final WindowInsets testWindowInsets = new WindowInsets.Builder() .setInsetsIgnoringVisibility(systemBars(), Insets.of(100, 200, 100, 200)) .build(); mWindowManager.setWindowBounds(testWindowBounds); mWindowManager.setWindowInsets(testWindowInsets); InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { mWindowMagnificationSettings.onConfigurationChanged(ActivityInfo.CONFIG_SCREEN_SIZE); }); // the draggable window bounds left/top should be only related to the insets, // and the bounds right/bottom should consider the panel frame size // inset left (100) = 100 int expectedLeft = 100; // inset top (200) = 200 int expectedTop = 200; // window width (1010 - 10) - inset right (100) - panel width int expectedRight = 900 - panelWidth; // window height (2020 - 20) - inset bottom (200) - panel height int expectedBottom = 1800 - panelHeight; Rect expectedBounds = new Rect(expectedLeft, expectedTop, expectedRight, expectedBottom); assertThat(mWindowMagnificationSettings.mDraggableWindowBounds).isEqualTo(expectedBounds); } @Test public void onScreenSizeChanged_resetPositionToRightBottomCorner() { setupMagnificationCapabilityAndMode( Loading Loading
packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java +6 −6 Original line number Diff line number Diff line Loading @@ -59,8 +59,8 @@ import android.widget.TextView; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; import com.android.systemui.res.R; import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView; import com.android.systemui.res.R; import com.android.systemui.util.settings.SecureSettings; import java.lang.annotation.Retention; Loading Loading @@ -671,17 +671,17 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest } private Rect getDraggableWindowBounds() { final int layoutMargin = mContext.getResources().getDimensionPixelSize( R.dimen.magnification_switch_button_margin); final WindowMetrics windowMetrics = mWindowManager.getCurrentWindowMetrics(); final Insets windowInsets = windowMetrics.getWindowInsets().getInsetsIgnoringVisibility( WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout()); // re-measure the settings panel view so that we can get the correct view size to inset int unspecificSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); mSettingView.measure(unspecificSpec, unspecificSpec); final Rect boundRect = new Rect(windowMetrics.getBounds()); boundRect.offsetTo(0, 0); boundRect.inset(0, 0, mParams.width, mParams.height); boundRect.inset(0, 0, mSettingView.getMeasuredWidth(), mSettingView.getMeasuredHeight()); boundRect.inset(windowInsets); boundRect.inset(layoutMargin, layoutMargin); return boundRect; } Loading
packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java +40 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPAB import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; import static android.view.WindowInsets.Type.systemBars; import static com.google.common.truth.Truth.assertThat; Loading @@ -42,6 +43,7 @@ import android.annotation.IdRes; import android.content.Context; import android.content.pm.ActivityInfo; import android.database.ContentObserver; import android.graphics.Insets; import android.graphics.Rect; import android.os.UserHandle; import android.provider.Settings; Loading @@ -49,6 +51,7 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.View; import android.view.ViewGroup; import android.view.WindowInsets; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; import android.widget.Button; Loading @@ -59,10 +62,10 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView; import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView.OnSeekBarWithIconButtonsChangeListener; import com.android.systemui.res.R; import com.android.systemui.util.settings.SecureSettings; import org.junit.After; Loading Loading @@ -313,6 +316,42 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { assertThat(magnifierMediumButton.isSelected()).isTrue(); } @Test public void onWindowBoundsChanged_updateDraggableWindowBounds() { setupMagnificationCapabilityAndMode( /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL, /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); mWindowMagnificationSettings.showSettingPanel(); // get the measured panel view frame size final int panelWidth = mSettingView.getMeasuredWidth(); final int panelHeight = mSettingView.getMeasuredHeight(); final Rect testWindowBounds = new Rect(10, 20, 1010, 2020); final WindowInsets testWindowInsets = new WindowInsets.Builder() .setInsetsIgnoringVisibility(systemBars(), Insets.of(100, 200, 100, 200)) .build(); mWindowManager.setWindowBounds(testWindowBounds); mWindowManager.setWindowInsets(testWindowInsets); InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { mWindowMagnificationSettings.onConfigurationChanged(ActivityInfo.CONFIG_SCREEN_SIZE); }); // the draggable window bounds left/top should be only related to the insets, // and the bounds right/bottom should consider the panel frame size // inset left (100) = 100 int expectedLeft = 100; // inset top (200) = 200 int expectedTop = 200; // window width (1010 - 10) - inset right (100) - panel width int expectedRight = 900 - panelWidth; // window height (2020 - 20) - inset bottom (200) - panel height int expectedBottom = 1800 - panelHeight; Rect expectedBounds = new Rect(expectedLeft, expectedTop, expectedRight, expectedBottom); assertThat(mWindowMagnificationSettings.mDraggableWindowBounds).isEqualTo(expectedBounds); } @Test public void onScreenSizeChanged_resetPositionToRightBottomCorner() { setupMagnificationCapabilityAndMode( Loading