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

Commit a3068b05 authored by archisha's avatar archisha
Browse files

Adding ViewCaptureAwareWindowManager to MagnificationModeSwitch window.

Bug: 357749687
Flag: com.android.systemui.enable_view_capture_tracing
Test: Ran relevant unit tests locally.
Change-Id: I86f82ddc91035ddeb4f80f06ebe4df8bddcf3d3f
parent 035470ae
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
import android.widget.ImageView;

import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
import com.android.systemui.res.R;
@@ -76,6 +77,7 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL
    private final Context mContext;
    private final AccessibilityManager mAccessibilityManager;
    private final WindowManager mWindowManager;
    private final ViewCaptureAwareWindowManager mViewCaptureAwareWindowManager;
    private final ImageView mImageView;
    private final Runnable mWindowInsetChangeRunnable;
    private final SfVsyncFrameCallbackProvider mSfVsyncFrameProvider;
@@ -99,17 +101,21 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL
        void onClick(int displayId);
    }

    MagnificationModeSwitch(@UiContext Context context, ClickListener clickListener) {
        this(context, createView(context), new SfVsyncFrameCallbackProvider(), clickListener);
    MagnificationModeSwitch(@UiContext Context context, ClickListener clickListener,
            ViewCaptureAwareWindowManager viewCaptureAwareWindowManager) {
        this(context, createView(context), new SfVsyncFrameCallbackProvider(), clickListener,
                viewCaptureAwareWindowManager);
    }

    @VisibleForTesting
    MagnificationModeSwitch(Context context, @NonNull ImageView imageView,
            SfVsyncFrameCallbackProvider sfVsyncFrameProvider, ClickListener clickListener) {
            SfVsyncFrameCallbackProvider sfVsyncFrameProvider, ClickListener clickListener,
            ViewCaptureAwareWindowManager viewCaptureAwareWindowManager) {
        mContext = context;
        mConfiguration = new Configuration(context.getResources().getConfiguration());
        mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class);
        mWindowManager = mContext.getSystemService(WindowManager.class);
        mViewCaptureAwareWindowManager = viewCaptureAwareWindowManager;
        mSfVsyncFrameProvider = sfVsyncFrameProvider;
        mClickListener = clickListener;
        mParams = createLayoutParams(context);
@@ -276,7 +282,7 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL
        mImageView.animate().cancel();
        mIsFadeOutAnimating = false;
        mImageView.setAlpha(0f);
        mWindowManager.removeView(mImageView);
        mViewCaptureAwareWindowManager.removeView(mImageView);
        mContext.unregisterComponentCallbacks(this);
        mIsVisible = false;
    }
@@ -310,7 +316,7 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL
                mParams.y = mDraggableWindowBounds.bottom;
                mToLeftScreenEdge = false;
            }
            mWindowManager.addView(mImageView, mParams);
            mViewCaptureAwareWindowManager.addView(mImageView, mParams);
            // Exclude magnification switch button from system gesture area.
            setSystemGestureExclusion();
            mIsVisible = true;
+11 −4
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.content.Context;
import android.hardware.display.DisplayManager;
import android.view.Display;

import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.dagger.SysUISingleton;

@@ -47,8 +48,10 @@ public class ModeSwitchesController implements ClickListener {
    private ClickListener mClickListenerDelegate;

    @Inject
    public ModeSwitchesController(Context context, DisplayManager displayManager) {
        mSwitchSupplier = new SwitchSupplier(context, displayManager, this::onClick);
    public ModeSwitchesController(Context context, DisplayManager displayManager,
            ViewCaptureAwareWindowManager viewCaptureAwareWindowManager) {
        mSwitchSupplier = new SwitchSupplier(context, displayManager, this::onClick,
                viewCaptureAwareWindowManager);
    }

    @VisibleForTesting
@@ -115,6 +118,7 @@ public class ModeSwitchesController implements ClickListener {

        private final Context mContext;
        private final ClickListener mClickListener;
        private final ViewCaptureAwareWindowManager mViewCaptureAwareWindowManager;

        /**
         * Supplies the switch for the given display.
@@ -124,17 +128,20 @@ public class ModeSwitchesController implements ClickListener {
         * @param clickListener The callback that will run when the switch is clicked
         */
        SwitchSupplier(Context context, DisplayManager displayManager,
                ClickListener clickListener) {
                ClickListener clickListener,
                ViewCaptureAwareWindowManager viewCaptureAwareWindowManager) {
            super(displayManager);
            mContext = context;
            mClickListener = clickListener;
            mViewCaptureAwareWindowManager = viewCaptureAwareWindowManager;
        }

        @Override
        protected MagnificationModeSwitch createInstance(Display display) {
            final Context uiContext = mContext.createWindowContext(display,
                    TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, /* options */ null);
            return new MagnificationModeSwitch(uiContext, mClickListener);
            return new MagnificationModeSwitch(uiContext, mClickListener,
                    mViewCaptureAwareWindowManager);
        }
    }
}
+9 −1
Original line number Diff line number Diff line
@@ -73,10 +73,14 @@ import android.widget.ImageView;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

import com.android.app.viewcapture.ViewCapture;
import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.res.R;

import kotlin.Lazy;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -104,6 +108,8 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
    private SfVsyncFrameCallbackProvider mSfVsyncFrameProvider;
    @Mock
    private MagnificationModeSwitch.ClickListener mClickListener;
    @Mock
    private Lazy<ViewCapture> mLazyViewCapture;
    private TestableWindowManager mWindowManager;
    private ViewPropertyAnimator mViewPropertyAnimator;
    private MagnificationModeSwitch mMagnificationModeSwitch;
@@ -133,8 +139,10 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
            return null;
        }).when(mSfVsyncFrameProvider).postFrameCallback(
                any(Choreographer.FrameCallback.class));
        ViewCaptureAwareWindowManager vwm = new ViewCaptureAwareWindowManager(mWindowManager,
                mLazyViewCapture, false);
        mMagnificationModeSwitch = new MagnificationModeSwitch(mContext, mSpyImageView,
                mSfVsyncFrameProvider, mClickListener);
                mSfVsyncFrameProvider, mClickListener, vwm);
        assertNotNull(mTouchListener);
    }

+5 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.view.View;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
import com.android.systemui.SysuiTestCase;

import org.junit.After;
@@ -50,6 +51,8 @@ public class ModeSwitchesControllerTest extends SysuiTestCase {
    private View mSpyView;
    @Mock
    private MagnificationModeSwitch.ClickListener mListener;
    @Mock
    private ViewCaptureAwareWindowManager mViewCaptureAwareWindowManager;


    @Before
@@ -58,7 +61,8 @@ public class ModeSwitchesControllerTest extends SysuiTestCase {
        mSupplier = new FakeSwitchSupplier(mContext.getSystemService(DisplayManager.class));
        mModeSwitchesController = new ModeSwitchesController(mSupplier);
        mModeSwitchesController.setClickListenerDelegate(mListener);
        mModeSwitch = Mockito.spy(new MagnificationModeSwitch(mContext, mModeSwitchesController));
        mModeSwitch = Mockito.spy(new MagnificationModeSwitch(mContext, mModeSwitchesController,
                mViewCaptureAwareWindowManager));
        mSpyView = Mockito.spy(new View(mContext));
    }