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

Commit 6caf1d8c authored by Garfield Tan's avatar Garfield Tan
Browse files

Add factory for TaskPositioner.

Bug: 64149458
Test: Unit test passes.
Change-Id: I5bcc22f5e51080001c16479f5636a915d4a4309b
parent 14b93353
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -59,6 +59,8 @@ class TaskPositioner {
    private static final String TAG_LOCAL = "TaskPositioner";
    private static final String TAG = TAG_WITH_CLASS_NAME ? TAG_LOCAL : TAG_WM;

    private static Factory sFactory;

    // The margin the pointer position has to be within the side of the screen to be
    // considered at the side of the screen.
    static final int SIDE_MARGIN_DIP = 100;
@@ -214,6 +216,7 @@ class TaskPositioner {
        }
    }

    /** Use {@link #create(WindowManagerService)} instead **/
    TaskPositioner(WindowManagerService service) {
        mService = service;
    }
@@ -622,4 +625,22 @@ class TaskPositioner {
    public String toShortString() {
        return TAG;
    }

    static void setFactory(Factory factory) {
        sFactory = factory;
    }

    static TaskPositioner create(WindowManagerService service) {
        if (sFactory == null) {
            sFactory = new Factory() {};
        }

        return sFactory.create(service);
    }

    interface Factory {
        default TaskPositioner create(WindowManagerService service) {
            return new TaskPositioner(service);
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -126,7 +126,7 @@ class TaskPositioningController {
        }

        Display display = displayContent.getDisplay();
        mTaskPositioner = new TaskPositioner(mService);
        mTaskPositioner = TaskPositioner.create(mService);
        mTaskPositioner.register(displayContent);
        mInputMonitor.updateInputWindowsLw(true /*force*/);

+21 −1
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import static com.android.server.wm.WindowManagerService.dipToPixel;
import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_HEIGHT_IN_DP;
import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_WIDTH_IN_DP;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

/**
@@ -57,6 +58,9 @@ public class TaskPositionerTests extends WindowTestsBase {
    @Before
    public void setUp() throws Exception {
        super.setUp();

        TaskPositioner.setFactory(null);

        final Display display = mDisplayContent.getDisplay();
        final DisplayMetrics dm = new DisplayMetrics();
        display.getMetrics(dm);
@@ -65,10 +69,26 @@ public class TaskPositionerTests extends WindowTestsBase {
        mMinVisibleWidth = dipToPixel(MINIMUM_VISIBLE_WIDTH_IN_DP, dm);
        mMinVisibleHeight = dipToPixel(MINIMUM_VISIBLE_HEIGHT_IN_DP, dm);

        mPositioner = new TaskPositioner(sWm);
        mPositioner = TaskPositioner.create(sWm);
        mPositioner.register(mDisplayContent);
    }

    @Test
    public void testOverrideFactory() throws Exception {
        final boolean[] created = new boolean[1];
        created[0] = false;
        TaskPositioner.setFactory(new TaskPositioner.Factory() {
            @Override
            public TaskPositioner create(WindowManagerService service) {
                created[0] = true;
                return null;
            }
        });

        assertNull(TaskPositioner.create(sWm));
        assertTrue(created[0]);
    }

    /**
     * This tests that free resizing will allow to change the orientation as well
     * as does some basic tests (e.g. dragging in Y only will keep X stable).