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

Commit 9ea42913 authored by Roy Chou's avatar Roy Chou
Browse files

chore(#MagSettingsPanel): adjust magnification settings panel ui when showing...

chore(#MagSettingsPanel): adjust magnification settings panel ui when showing for fullscreen magnifier

When showing WindowMagnificationSettings panel for fullscreen magnifier, the edit button and allow diagonal switch are not effectual. Therefore, we hide these two ui items when showing for fullscreen magnifier.

Bug: 271127581
Test: manually
      atest WindowMagnificationSettingsTest
      atest MagnificationSettingsControllerTest
      atest WindowMagnificationTest
Change-Id: Ib27b0d5cac0b6c705e29e499cabb2399796c91d3
parent 8fca1f51
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -100,11 +100,11 @@
    </LinearLayout>

    <LinearLayout
        android:id="@+id/magnifier_horizontal_lock_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="@dimen/magnification_setting_view_margin"
        android:layout_marginBottom="@dimen/magnification_setting_view_margin"
        android:focusable="true">

        <TextView
@@ -132,6 +132,7 @@
        android:layout_height="wrap_content"
        android:text="@string/accessibility_magnification_zoom"
        android:textAppearance="@style/TextAppearance.MagnificationSetting.Title"
        android:layout_marginTop="@dimen/magnification_setting_view_margin"
        android:focusable="true" />

    <com.android.systemui.common.ui.view.SeekBarWithIconButtonsView
+10 −2
Original line number Diff line number Diff line
@@ -81,12 +81,20 @@ public class MagnificationSettingsController implements ComponentCallbacks {
        }
    }

    void showMagnificationSettings() {
    /**
     * Shows magnification settings panel {@link WindowMagnificationSettings}. The panel ui would be
     * various for different magnification mode.
     *
     * @param mode      The magnification mode
     * @see android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW
     * @see android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN
     */
    void showMagnificationSettings(int mode) {
        if (!mWindowMagnificationSettings.isSettingPanelShowing()) {
            onConfigurationChanged(mContext.getResources().getConfiguration());
            mContext.registerComponentCallbacks(this);
        }
        mWindowMagnificationSettings.showSettingPanel();
        mWindowMagnificationSettings.showSettingPanel(mode);
    }

    void closeMagnificationSettings() {
+10 −4
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.accessibility;

import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY;

@@ -167,7 +168,10 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback
                mMagnificationSettingsControllerCallback, displayManager, secureSettings);

        mModeSwitchesController.setClickListenerDelegate(
                displayId -> mHandler.post(() -> showMagnificationSettingsPanel(displayId)));
                displayId -> mHandler.post(() -> {
                    showMagnificationSettingsPanel(displayId,
                            ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
                }));
    }

    @Override
@@ -249,11 +253,11 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback
    }

    @MainThread
    void showMagnificationSettingsPanel(int displayId) {
    void showMagnificationSettingsPanel(int displayId, int mode) {
        final MagnificationSettingsController magnificationSettingsController =
                mMagnificationSettingsSupplier.get(displayId);
        if (magnificationSettingsController != null) {
            magnificationSettingsController.showMagnificationSettings();
            magnificationSettingsController.showMagnificationSettings(mode);
        }
    }

@@ -329,7 +333,9 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback

        @Override
        public void onClickSettingsButton(int displayId) {
            mHandler.post(() -> showMagnificationSettingsPanel(displayId));
            mHandler.post(() -> {
                showMagnificationSettingsPanel(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
            });
        }
    };

+56 −6
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.accessibility;

import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_NONE;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;

@@ -83,6 +84,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
    private boolean mSingleTapDetected = false;

    private SeekBarWithIconButtonsView mZoomSeekbar;
    private LinearLayout mAllowDiagonalScrollingView;
    private Switch mAllowDiagonalScrollingSwitch;
    private LinearLayout mPanelView;
    private LinearLayout mSettingView;
@@ -99,6 +101,9 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
    private static final float A11Y_SCALE_MIN_VALUE = 1.0f;
    private WindowMagnificationSettingsCallback mCallback;

    // the magnification mode that triggers showing the panel
    private int mTriggeringMode = ACCESSIBILITY_MAGNIFICATION_MODE_NONE;

    @Retention(RetentionPolicy.SOURCE)
    @IntDef({
            MagnificationSize.NONE,
@@ -280,7 +285,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
    @Override
    public boolean onFinish(float xOffset, float yOffset) {
        if (!mSingleTapDetected) {
            showSettingPanel();
            showSettingPanel(mTriggeringMode);
        }
        mSingleTapDetected = false;
        return true;
@@ -320,8 +325,16 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
        mCallback.onSettingsPanelVisibilityChanged(/* shown= */ false);
    }

    public void showSettingPanel() {
        showSettingPanel(true);
    /**
     * Shows magnification settings panel. The panel ui would be various for
     * different magnification mode.
     *
     * @param mode      The magnification mode
     * @see android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW
     * @see android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN
     */
    public void showSettingPanel(int mode) {
        showSettingPanel(mode, true);
    }

    public boolean isSettingPanelShowing() {
@@ -337,14 +350,18 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
    }

    /**
     * Shows magnification panel for set window magnification.
     * Shows magnification panel for set magnification.
     * When the panel is going to be visible by calling this method, the layout position can be
     * reset depending on the flag.
     *
     * @param mode The magnification mode
     * @param resetPosition if the button position needs be reset
     */
    private void showSettingPanel(boolean resetPosition) {
    private void showSettingPanel(int mode, boolean resetPosition) {
        if (!mIsVisible) {
            updateUIControlsIfNeed(mode);
            mTriggeringMode = mode;

            if (resetPosition) {
                mDraggableWindowBounds.set(getDraggableWindowBounds());
                mParams.x = mDraggableWindowBounds.right;
@@ -361,6 +378,37 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
        mContext.registerReceiver(mScreenOffReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));
    }

    private void updateUIControlsIfNeed(int mode) {
        if (mode == mTriggeringMode) {
            return;
        }

        int selectedButtonIndex = mLastSelectedButtonIndex;
        switch (mode) {
            case ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN:
                // set the edit button visibility to View.INVISIBLE to keep the height, to prevent
                // the size title from too close to the size buttons
                mEditButton.setVisibility(View.INVISIBLE);
                mAllowDiagonalScrollingView.setVisibility(View.GONE);
                // force the fullscreen button showing
                selectedButtonIndex = MagnificationSize.FULLSCREEN;
                break;

            case ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW:
                mEditButton.setVisibility(View.VISIBLE);
                mAllowDiagonalScrollingView.setVisibility(View.VISIBLE);
                if (selectedButtonIndex == MagnificationSize.FULLSCREEN) {
                    selectedButtonIndex = MagnificationSize.NONE;
                }
                break;

            default:
                break;
        }

        updateSelectedButton(selectedButtonIndex);
    }

    private final BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
@@ -399,6 +447,8 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
        setSeekbarProgress(scale);
        mZoomSeekbar.setOnSeekBarChangeListener(new ZoomSeekbarChangeListener());

        mAllowDiagonalScrollingView =
                (LinearLayout) mSettingView.findViewById(R.id.magnifier_horizontal_lock_view);
        mAllowDiagonalScrollingSwitch =
                (Switch) mSettingView.findViewById(R.id.magnifier_horizontal_lock_switch);
        mAllowDiagonalScrollingSwitch.setChecked(mAllowDiagonalScrolling);
@@ -452,7 +502,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
            hideSettingPanel(/* resetPosition= */ false);
            inflateView();
            if (showSettingPanelAfterThemeChange) {
                showSettingPanel(/* resetPosition= */ false);
                showSettingPanel(mTriggeringMode, /* resetPosition= */ false);
            }
            return;
        }
+4 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.accessibility;

import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;

import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
@@ -73,9 +74,10 @@ public class MagnificationSettingsControllerTest extends SysuiTestCase {

    @Test
    public void testShowSettingsPanel() {
        mMagnificationSettingsController.showMagnificationSettings();
        final int mode = ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
        mMagnificationSettingsController.showMagnificationSettings(mode);

        verify(mWindowMagnificationSettings).showSettingPanel();
        verify(mWindowMagnificationSettings).showSettingPanel(eq(mode));
    }

    @Test
Loading