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

Commit 32baa63a authored by archisha's avatar archisha
Browse files

Adding ViewCaptureAwareWindowManager to WindowMagnificationController.

Bug: 360262088
Flag: com.android.systemui.enable_view_capture_tracing
Test: Ran relevant unit tests locally.
Change-Id: I13bf80ed7949ea6ff02f80e9e6c9f290b9657823
parent cc7e1e5e
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -100,17 +100,20 @@ public class MagnificationImpl implements Magnification, CommandQueue.Callbacks
        private final WindowMagnifierCallback mWindowMagnifierCallback;
        private final WindowMagnifierCallback mWindowMagnifierCallback;
        private final SysUiState mSysUiState;
        private final SysUiState mSysUiState;
        private final SecureSettings mSecureSettings;
        private final SecureSettings mSecureSettings;
        private final ViewCaptureAwareWindowManager mViewCaptureAwareWindowManager;


        WindowMagnificationControllerSupplier(Context context, Handler handler,
        WindowMagnificationControllerSupplier(Context context, Handler handler,
                WindowMagnifierCallback windowMagnifierCallback,
                WindowMagnifierCallback windowMagnifierCallback,
                DisplayManager displayManager, SysUiState sysUiState,
                DisplayManager displayManager, SysUiState sysUiState,
                SecureSettings secureSettings) {
                SecureSettings secureSettings,
                ViewCaptureAwareWindowManager viewCaptureAwareWindowManager) {
            super(displayManager);
            super(displayManager);
            mContext = context;
            mContext = context;
            mHandler = handler;
            mHandler = handler;
            mWindowMagnifierCallback = windowMagnifierCallback;
            mWindowMagnifierCallback = windowMagnifierCallback;
            mSysUiState = sysUiState;
            mSysUiState = sysUiState;
            mSecureSettings = secureSettings;
            mSecureSettings = secureSettings;
            mViewCaptureAwareWindowManager = viewCaptureAwareWindowManager;
        }
        }


        @Override
        @Override
@@ -137,7 +140,8 @@ public class MagnificationImpl implements Magnification, CommandQueue.Callbacks
                    mSecureSettings,
                    mSecureSettings,
                    scvhSupplier,
                    scvhSupplier,
                    new SfVsyncFrameCallbackProvider(),
                    new SfVsyncFrameCallbackProvider(),
                    WindowManagerGlobal::getWindowSession);
                    WindowManagerGlobal::getWindowSession,
                    mViewCaptureAwareWindowManager);
        }
        }
    }
    }


@@ -267,7 +271,7 @@ public class MagnificationImpl implements Magnification, CommandQueue.Callbacks
        mA11yLogger = a11yLogger;
        mA11yLogger = a11yLogger;
        mWindowMagnificationControllerSupplier = new WindowMagnificationControllerSupplier(context,
        mWindowMagnificationControllerSupplier = new WindowMagnificationControllerSupplier(context,
                mHandler, mWindowMagnifierCallback,
                mHandler, mWindowMagnifierCallback,
                displayManager, sysUiState, secureSettings);
                displayManager, sysUiState, secureSettings, viewCaptureAwareWindowManager);
        mFullscreenMagnificationControllerSupplier = new FullscreenMagnificationControllerSupplier(
        mFullscreenMagnificationControllerSupplier = new FullscreenMagnificationControllerSupplier(
                context, displayManager, mHandler, mExecutor, iWindowManager);
                context, displayManager, mHandler, mExecutor, iWindowManager);
        mMagnificationSettingsSupplier = new SettingsSupplier(context,
        mMagnificationSettingsSupplier = new SettingsSupplier(context,
+7 −3
Original line number Original line Diff line number Diff line
@@ -80,6 +80,7 @@ import android.widget.ImageView;
import androidx.annotation.UiThread;
import androidx.annotation.UiThread;
import androidx.core.math.MathUtils;
import androidx.core.math.MathUtils;


import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
import com.android.internal.accessibility.common.MagnificationConstants;
import com.android.internal.accessibility.common.MagnificationConstants;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
@@ -126,6 +127,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
    private final SurfaceControl.Transaction mTransaction;
    private final SurfaceControl.Transaction mTransaction;


    private final WindowManager mWm;
    private final WindowManager mWm;
    private final ViewCaptureAwareWindowManager mViewCaptureAwareWindowManager;


    private float mScale;
    private float mScale;
    private int mSettingsButtonIndex = MagnificationSize.DEFAULT;
    private int mSettingsButtonIndex = MagnificationSize.DEFAULT;
@@ -258,7 +260,8 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
            SecureSettings secureSettings,
            SecureSettings secureSettings,
            Supplier<SurfaceControlViewHost> scvhSupplier,
            Supplier<SurfaceControlViewHost> scvhSupplier,
            SfVsyncFrameCallbackProvider sfVsyncFrameProvider,
            SfVsyncFrameCallbackProvider sfVsyncFrameProvider,
            Supplier<IWindowSession> globalWindowSessionSupplier) {
            Supplier<IWindowSession> globalWindowSessionSupplier,
            ViewCaptureAwareWindowManager viewCaptureAwareWindowManager) {
        mContext = context;
        mContext = context;
        mHandler = handler;
        mHandler = handler;
        mAnimationController = animationController;
        mAnimationController = animationController;
@@ -280,6 +283,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold


        mWm = context.getSystemService(WindowManager.class);
        mWm = context.getSystemService(WindowManager.class);
        mWindowBounds = new Rect(mWm.getCurrentWindowMetrics().getBounds());
        mWindowBounds = new Rect(mWm.getCurrentWindowMetrics().getBounds());
        mViewCaptureAwareWindowManager = viewCaptureAwareWindowManager;


        mResources = mContext.getResources();
        mResources = mContext.getResources();
        mScale = secureSettings.getFloatForUser(
        mScale = secureSettings.getFloatForUser(
@@ -510,7 +514,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
            mHandler.removeCallbacks(mMirrorViewRunnable);
            mHandler.removeCallbacks(mMirrorViewRunnable);
            mMirrorView.removeOnLayoutChangeListener(mMirrorViewLayoutChangeListener);
            mMirrorView.removeOnLayoutChangeListener(mMirrorViewLayoutChangeListener);
            if (!Flags.createWindowlessWindowMagnifier()) {
            if (!Flags.createWindowlessWindowMagnifier()) {
                mWm.removeView(mMirrorView);
                mViewCaptureAwareWindowManager.removeView(mMirrorView);
            }
            }
            mMirrorView = null;
            mMirrorView = null;
        }
        }
@@ -722,7 +726,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
            return v.onApplyWindowInsets(insets);
            return v.onApplyWindowInsets(insets);
        });
        });


        mWm.addView(mMirrorView, params);
        mViewCaptureAwareWindowManager.addView(mMirrorView, params);


        SurfaceHolder holder = mMirrorSurfaceView.getHolder();
        SurfaceHolder holder = mMirrorSurfaceView.getHolder();
        holder.addCallback(this);
        holder.addCallback(this);
+9 −3
Original line number Original line Diff line number Diff line
@@ -53,6 +53,7 @@ import android.window.InputTransferToken;


import androidx.test.filters.LargeTest;
import androidx.test.filters.LargeTest;


import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
import com.android.systemui.Flags;
import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
@@ -112,6 +113,8 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase {
    SysUiState mSysUiState;
    SysUiState mSysUiState;
    @Mock
    @Mock
    SecureSettings mSecureSettings;
    SecureSettings mSecureSettings;
    @Mock
    ViewCaptureAwareWindowManager mViewCaptureAwareWindowManager;
    private SpyWindowMagnificationController mController;
    private SpyWindowMagnificationController mController;
    private WindowMagnificationController mSpyController;
    private WindowMagnificationController mSpyController;
    private WindowMagnificationAnimationController mWindowMagnificationAnimationController;
    private WindowMagnificationAnimationController mWindowMagnificationAnimationController;
@@ -164,7 +167,8 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase {
                mSysUiState,
                mSysUiState,
                mSecureSettings,
                mSecureSettings,
                scvhSupplier,
                scvhSupplier,
                mSfVsyncFrameProvider);
                mSfVsyncFrameProvider,
                mViewCaptureAwareWindowManager);


        mSpyController = mController.getSpyController();
        mSpyController = mController.getSpyController();
    }
    }
@@ -1015,7 +1019,8 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase {
                SysUiState sysUiState,
                SysUiState sysUiState,
                SecureSettings secureSettings,
                SecureSettings secureSettings,
                Supplier<SurfaceControlViewHost> scvhSupplier,
                Supplier<SurfaceControlViewHost> scvhSupplier,
                SfVsyncFrameCallbackProvider sfVsyncFrameProvider) {
                SfVsyncFrameCallbackProvider sfVsyncFrameProvider,
                ViewCaptureAwareWindowManager viewCaptureAwareWindowManager) {
            super(
            super(
                    context,
                    context,
                    handler,
                    handler,
@@ -1027,7 +1032,8 @@ public class WindowMagnificationAnimationControllerTest extends SysuiTestCase {
                    secureSettings,
                    secureSettings,
                    scvhSupplier,
                    scvhSupplier,
                    sfVsyncFrameProvider,
                    sfVsyncFrameProvider,
                    WindowManagerGlobal::getWindowSession);
                    WindowManagerGlobal::getWindowSession,
                    viewCaptureAwareWindowManager);
            mSpyController = Mockito.mock(WindowMagnificationController.class);
            mSpyController = Mockito.mock(WindowMagnificationController.class);
        }
        }


+11 −1
Original line number Original line Diff line number Diff line
@@ -92,6 +92,8 @@ import androidx.test.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.filters.LargeTest;


import com.android.app.viewcapture.ViewCapture;
import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
import com.android.systemui.Flags;
import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
@@ -107,6 +109,8 @@ import com.android.systemui.utils.os.FakeHandler;


import com.google.common.util.concurrent.AtomicDouble;
import com.google.common.util.concurrent.AtomicDouble;


import kotlin.Lazy;

import org.junit.After;
import org.junit.After;
import org.junit.Assume;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Before;
@@ -150,6 +154,8 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
    private SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();
    private SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();
    @Mock
    @Mock
    private SecureSettings mSecureSettings;
    private SecureSettings mSecureSettings;
    @Mock
    private Lazy<ViewCapture> mLazyViewCapture;


    private long mWaitAnimationDuration;
    private long mWaitAnimationDuration;
    private long mWaitBounceEffectDuration;
    private long mWaitBounceEffectDuration;
@@ -226,6 +232,9 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
        when(mContext.getSharedPreferences(
        when(mContext.getSharedPreferences(
                eq("window_magnification_preferences"), anyInt()))
                eq("window_magnification_preferences"), anyInt()))
                .thenReturn(mSharedPreferences);
                .thenReturn(mSharedPreferences);
        ViewCaptureAwareWindowManager viewCaptureAwareWindowManager = new
                ViewCaptureAwareWindowManager(mWindowManager, mLazyViewCapture,
                /* isViewCaptureEnabled= */ false);
        mWindowMagnificationController =
        mWindowMagnificationController =
                new WindowMagnificationController(
                new WindowMagnificationController(
                        mContext,
                        mContext,
@@ -238,7 +247,8 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
                        mSecureSettings,
                        mSecureSettings,
                        /* scvhSupplier= */ () -> null,
                        /* scvhSupplier= */ () -> null,
                        mSfVsyncFrameProvider,
                        mSfVsyncFrameProvider,
                        /* globalWindowSessionSupplier= */ () -> mWindowSessionSpy);
                        /* globalWindowSessionSupplier= */ () -> mWindowSessionSpy,
                        viewCaptureAwareWindowManager);


        verify(mMirrorWindowControl).setWindowDelegate(
        verify(mMirrorWindowControl).setWindowDelegate(
                any(MirrorWindowControl.MirrorWindowDelegate.class));
                any(MirrorWindowControl.MirrorWindowDelegate.class));
+5 −1
Original line number Original line Diff line number Diff line
@@ -90,6 +90,7 @@ import androidx.test.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.filters.LargeTest;


import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
import com.android.systemui.Flags;
import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.AnimatorTestRule;
import com.android.systemui.animation.AnimatorTestRule;
@@ -144,6 +145,8 @@ public class WindowMagnificationControllerWindowlessMagnifierTest extends SysuiT
    private SurfaceControl.Transaction mTransaction;
    private SurfaceControl.Transaction mTransaction;
    @Mock
    @Mock
    private SecureSettings mSecureSettings;
    private SecureSettings mSecureSettings;
    @Mock
    private ViewCaptureAwareWindowManager mViewCaptureAwareWindowManager;


    private long mWaitAnimationDuration;
    private long mWaitAnimationDuration;
    private long mWaitBounceEffectDuration;
    private long mWaitBounceEffectDuration;
@@ -240,7 +243,8 @@ public class WindowMagnificationControllerWindowlessMagnifierTest extends SysuiT
                        mSecureSettings,
                        mSecureSettings,
                        scvhSupplier,
                        scvhSupplier,
                        /* sfVsyncFrameProvider= */ null,
                        /* sfVsyncFrameProvider= */ null,
                        /* globalWindowSessionSupplier= */ null);
                        /* globalWindowSessionSupplier= */ null,
                        mViewCaptureAwareWindowManager);


        verify(mMirrorWindowControl).setWindowDelegate(
        verify(mMirrorWindowControl).setWindowDelegate(
                any(MirrorWindowControl.MirrorWindowDelegate.class));
                any(MirrorWindowControl.MirrorWindowDelegate.class));