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

Commit 95d6d82b authored by sanryhuang's avatar sanryhuang
Browse files

Enable Per-display support on MagnificationController.

Refactor
1. Create DisplayMagnification to support multi-display
2. Using PooledLambda to simplify the existing code

Bug: 112273690
Test: MagnificationControllerTest, MagnificationGestureHandlerTest and
Manual test.

Change-Id: I19436b4671421dc58c0036e55f75178c1f413e9e
parent a68e3ccd
Loading
Loading
Loading
Loading
+590 −486

File changed.

Preview size limit exceeded, changes collapsed.

+2 −6
Original line number Diff line number Diff line
@@ -86,12 +86,8 @@ public class MagnificationControllerTest {
    final AccessibilityManagerService mMockAms = mock(AccessibilityManagerService.class);
    final WindowManagerInternal mMockWindowManager = mock(WindowManagerInternal.class);
    final MessageCapturingHandler mMessageCapturingHandler =
            new MessageCapturingHandler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            return mMagnificationController.handleMessage(msg);
        }
    });
            new MessageCapturingHandler(null);

    final ValueAnimator mMockValueAnimator = mock(ValueAnimator.class);
    MagnificationController.SettingsBridge mMockSettingsBridge;

+22 −6
Original line number Diff line number Diff line
@@ -29,9 +29,11 @@ import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.content.Context;
import android.os.Message;
@@ -44,7 +46,9 @@ import androidx.test.runner.AndroidJUnit4;

import com.android.server.testutils.OffsettableClock;
import com.android.server.testutils.TestHandler;
import com.android.server.wm.WindowManagerInternal;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -101,8 +105,15 @@ public class MagnificationGestureHandlerTest {
    public static final float DEFAULT_Y = 299;

    private Context mContext;
    private AccessibilityManagerService mAms;
    private MagnificationController mMagnificationController;
    final AccessibilityManagerService mMockAms = mock(AccessibilityManagerService.class);
    final WindowManagerInternal mMockWindowManager = mock(WindowManagerInternal.class);
    final MessageCapturingHandler mMessageCapturingHandler =
            new MessageCapturingHandler(null);
    final ValueAnimator mMockValueAnimator = mock(ValueAnimator.class);
    MagnificationController.SettingsBridge mMockSettingsBridge =
            mock(MagnificationController.SettingsBridge.class);
    MagnificationController mMagnificationController;

    private OffsettableClock mClock;
    private MagnificationGestureHandler mMgh;
    private TestHandler mHandler;
@@ -112,9 +123,9 @@ public class MagnificationGestureHandlerTest {
    @Before
    public void setUp() {
        mContext = InstrumentationRegistry.getContext();
        mAms = new AccessibilityManagerService(mContext);
        mMagnificationController = new MagnificationController(
                mContext, mAms, /* lock */ new Object()) {
        mMagnificationController = new MagnificationController(mContext, mMockAms, new Object(),
                mMessageCapturingHandler, mMockWindowManager, mMockValueAnimator,
                mMockSettingsBridge) {
            @Override
            public boolean magnificationRegionContains(float x, float y) {
                return true;
@@ -123,7 +134,7 @@ public class MagnificationGestureHandlerTest {
            @Override
            void setForceShowMagnifiableBounds(boolean show) {}
        };
        mMagnificationController.mRegistered = true;
        mMagnificationController.register();
        mClock = new OffsettableClock.Stopped();

        boolean detectTripleTap = true;
@@ -131,6 +142,11 @@ public class MagnificationGestureHandlerTest {
        mMgh = newInstance(detectTripleTap, detectShortcutTrigger);
    }

    @After
    public void tearDown() {
        mMagnificationController.unregister();
    }

    @NonNull
    private MagnificationGestureHandler newInstance(boolean detectTripleTap,
            boolean detectShortcutTrigger) {