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

Commit 4ac43d40 authored by Archisha Baranwal's avatar Archisha Baranwal Committed by Android (Google) Code Review
Browse files

Merge "Adding ViewCaptureAwareWindowManager to MagnificationModeSwitch window." into main

parents 34201732 a3068b05
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));
    }