Loading core/java/android/window/DisplayAreaOrganizer.java +8 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,14 @@ public class DisplayAreaOrganizer extends WindowOrganizer { */ public static final int FEATURE_WINDOWED_MAGNIFICATION = FEATURE_SYSTEM_FIRST + 4; /** * Display area that can be magnified in * {@link Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN}. This is different from * {@link #FEATURE_WINDOWED_MAGNIFICATION} that the whole display will be magnified. * @hide */ public static final int FEATURE_FULLSCREEN_MAGNIFICATION = FEATURE_SYSTEM_FIRST + 5; /** * The last boundary of display area for system features */ Loading services/core/java/com/android/server/wm/DisplayAreaPolicy.java +19 −6 Original line number Diff line number Diff line Loading @@ -17,12 +17,19 @@ package com.android.server.wm; import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static android.window.DisplayAreaOrganizer.FEATURE_DEFAULT_TASK_CONTAINER; import static android.window.DisplayAreaOrganizer.FEATURE_FULLSCREEN_MAGNIFICATION; import static android.window.DisplayAreaOrganizer.FEATURE_ONE_HANDED; import static android.window.DisplayAreaOrganizer.FEATURE_WINDOWED_MAGNIFICATION; import static com.android.server.wm.DisplayAreaPolicyBuilder.Feature; import static com.android.server.wm.DisplayAreaPolicyBuilder.HierarchyBuilder; import android.content.res.Resources; import android.text.TextUtils; Loading Loading @@ -81,21 +88,27 @@ public abstract class DisplayAreaPolicy { // Define the features that will be supported under the root of the whole logical // display. The policy will build the DisplayArea hierarchy based on this. DisplayAreaPolicyBuilder.HierarchyBuilder rootHierarchy = new DisplayAreaPolicyBuilder.HierarchyBuilder(root) .addFeature(new DisplayAreaPolicyBuilder.Feature.Builder(wmService.mPolicy, "WindowedMagnification", FEATURE_WINDOWED_MAGNIFICATION) HierarchyBuilder rootHierarchy = new HierarchyBuilder(root) .addFeature(new Feature.Builder(wmService.mPolicy, "WindowedMagnification", FEATURE_WINDOWED_MAGNIFICATION) .upTo(TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY) .except(TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY) // Make the DA dimmable so that the magnify window also mirrors the dim // layer .setNewDisplayAreaSupplier(DisplayArea.Dimmable::new) .build()) .addFeature(new DisplayAreaPolicyBuilder.Feature.Builder(wmService.mPolicy, "OneHanded", FEATURE_ONE_HANDED) .addFeature(new Feature.Builder(wmService.mPolicy, "OneHanded", FEATURE_ONE_HANDED) .all() .except(TYPE_NAVIGATION_BAR, TYPE_NAVIGATION_BAR_PANEL) .build()) .addFeature(new Feature.Builder(wmService.mPolicy, "FullscreenMagnification", FEATURE_FULLSCREEN_MAGNIFICATION) .all() .except(TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, TYPE_INPUT_METHOD, TYPE_INPUT_METHOD_DIALOG, TYPE_MAGNIFICATION_OVERLAY, TYPE_NAVIGATION_BAR, TYPE_NAVIGATION_BAR_PANEL) .build()) .setImeContainer(imeContainer) .setTaskDisplayAreas(tdaList); Loading services/tests/wmtests/src/com/android/server/wm/DisplayAreaPolicyBuilderTest.java +35 −0 Original line number Diff line number Diff line Loading @@ -26,9 +26,11 @@ import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; import static android.view.WindowManagerPolicyConstants.APPLICATION_LAYER; import static android.window.DisplayAreaOrganizer.FEATURE_DEFAULT_TASK_CONTAINER; import static android.window.DisplayAreaOrganizer.FEATURE_FULLSCREEN_MAGNIFICATION; import static android.window.DisplayAreaOrganizer.FEATURE_ONE_HANDED; import static android.window.DisplayAreaOrganizer.FEATURE_ROOT; import static android.window.DisplayAreaOrganizer.FEATURE_VENDOR_FIRST; import static android.window.DisplayAreaOrganizer.FEATURE_WINDOWED_MAGNIFICATION; import static com.android.server.wm.DisplayArea.Type.ABOVE_TASKS; import static com.android.server.wm.DisplayAreaPolicyBuilder.Feature; Loading Loading @@ -177,6 +179,39 @@ public class DisplayAreaPolicyBuilderTest { assertThat(hasOneHandedFeature).isTrue(); } @Test public void testBuilder_defaultPolicy_hasWindowedMagnificationFeature() { final DisplayAreaPolicy.Provider defaultProvider = DisplayAreaPolicy.Provider.fromResources( resourcesWithProvider("")); final DisplayAreaPolicyBuilder.Result defaultPolicy = (DisplayAreaPolicyBuilder.Result) defaultProvider.instantiate(mWms, mDisplayContent, mRoot, mImeContainer); final List<Feature> features = defaultPolicy.getFeatures(); boolean hasWindowedMagnificationFeature = false; for (Feature feature : features) { hasWindowedMagnificationFeature |= feature.getId() == FEATURE_WINDOWED_MAGNIFICATION; } assertThat(hasWindowedMagnificationFeature).isTrue(); } @Test public void testBuilder_defaultPolicy_hasFullscreenMagnificationFeature() { final DisplayAreaPolicy.Provider defaultProvider = DisplayAreaPolicy.Provider.fromResources( resourcesWithProvider("")); final DisplayAreaPolicyBuilder.Result defaultPolicy = (DisplayAreaPolicyBuilder.Result) defaultProvider.instantiate(mWms, mDisplayContent, mRoot, mImeContainer); final List<Feature> features = defaultPolicy.getFeatures(); boolean hasFullscreenMagnificationFeature = false; for (Feature feature : features) { hasFullscreenMagnificationFeature |= feature.getId() == FEATURE_FULLSCREEN_MAGNIFICATION; } assertThat(hasFullscreenMagnificationFeature).isTrue(); } @Test public void testBuilder_createCustomizedDisplayAreaForFeature() { final Feature dimmable; Loading Loading
core/java/android/window/DisplayAreaOrganizer.java +8 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,14 @@ public class DisplayAreaOrganizer extends WindowOrganizer { */ public static final int FEATURE_WINDOWED_MAGNIFICATION = FEATURE_SYSTEM_FIRST + 4; /** * Display area that can be magnified in * {@link Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN}. This is different from * {@link #FEATURE_WINDOWED_MAGNIFICATION} that the whole display will be magnified. * @hide */ public static final int FEATURE_FULLSCREEN_MAGNIFICATION = FEATURE_SYSTEM_FIRST + 5; /** * The last boundary of display area for system features */ Loading
services/core/java/com/android/server/wm/DisplayAreaPolicy.java +19 −6 Original line number Diff line number Diff line Loading @@ -17,12 +17,19 @@ package com.android.server.wm; import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static android.window.DisplayAreaOrganizer.FEATURE_DEFAULT_TASK_CONTAINER; import static android.window.DisplayAreaOrganizer.FEATURE_FULLSCREEN_MAGNIFICATION; import static android.window.DisplayAreaOrganizer.FEATURE_ONE_HANDED; import static android.window.DisplayAreaOrganizer.FEATURE_WINDOWED_MAGNIFICATION; import static com.android.server.wm.DisplayAreaPolicyBuilder.Feature; import static com.android.server.wm.DisplayAreaPolicyBuilder.HierarchyBuilder; import android.content.res.Resources; import android.text.TextUtils; Loading Loading @@ -81,21 +88,27 @@ public abstract class DisplayAreaPolicy { // Define the features that will be supported under the root of the whole logical // display. The policy will build the DisplayArea hierarchy based on this. DisplayAreaPolicyBuilder.HierarchyBuilder rootHierarchy = new DisplayAreaPolicyBuilder.HierarchyBuilder(root) .addFeature(new DisplayAreaPolicyBuilder.Feature.Builder(wmService.mPolicy, "WindowedMagnification", FEATURE_WINDOWED_MAGNIFICATION) HierarchyBuilder rootHierarchy = new HierarchyBuilder(root) .addFeature(new Feature.Builder(wmService.mPolicy, "WindowedMagnification", FEATURE_WINDOWED_MAGNIFICATION) .upTo(TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY) .except(TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY) // Make the DA dimmable so that the magnify window also mirrors the dim // layer .setNewDisplayAreaSupplier(DisplayArea.Dimmable::new) .build()) .addFeature(new DisplayAreaPolicyBuilder.Feature.Builder(wmService.mPolicy, "OneHanded", FEATURE_ONE_HANDED) .addFeature(new Feature.Builder(wmService.mPolicy, "OneHanded", FEATURE_ONE_HANDED) .all() .except(TYPE_NAVIGATION_BAR, TYPE_NAVIGATION_BAR_PANEL) .build()) .addFeature(new Feature.Builder(wmService.mPolicy, "FullscreenMagnification", FEATURE_FULLSCREEN_MAGNIFICATION) .all() .except(TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, TYPE_INPUT_METHOD, TYPE_INPUT_METHOD_DIALOG, TYPE_MAGNIFICATION_OVERLAY, TYPE_NAVIGATION_BAR, TYPE_NAVIGATION_BAR_PANEL) .build()) .setImeContainer(imeContainer) .setTaskDisplayAreas(tdaList); Loading
services/tests/wmtests/src/com/android/server/wm/DisplayAreaPolicyBuilderTest.java +35 −0 Original line number Diff line number Diff line Loading @@ -26,9 +26,11 @@ import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; import static android.view.WindowManagerPolicyConstants.APPLICATION_LAYER; import static android.window.DisplayAreaOrganizer.FEATURE_DEFAULT_TASK_CONTAINER; import static android.window.DisplayAreaOrganizer.FEATURE_FULLSCREEN_MAGNIFICATION; import static android.window.DisplayAreaOrganizer.FEATURE_ONE_HANDED; import static android.window.DisplayAreaOrganizer.FEATURE_ROOT; import static android.window.DisplayAreaOrganizer.FEATURE_VENDOR_FIRST; import static android.window.DisplayAreaOrganizer.FEATURE_WINDOWED_MAGNIFICATION; import static com.android.server.wm.DisplayArea.Type.ABOVE_TASKS; import static com.android.server.wm.DisplayAreaPolicyBuilder.Feature; Loading Loading @@ -177,6 +179,39 @@ public class DisplayAreaPolicyBuilderTest { assertThat(hasOneHandedFeature).isTrue(); } @Test public void testBuilder_defaultPolicy_hasWindowedMagnificationFeature() { final DisplayAreaPolicy.Provider defaultProvider = DisplayAreaPolicy.Provider.fromResources( resourcesWithProvider("")); final DisplayAreaPolicyBuilder.Result defaultPolicy = (DisplayAreaPolicyBuilder.Result) defaultProvider.instantiate(mWms, mDisplayContent, mRoot, mImeContainer); final List<Feature> features = defaultPolicy.getFeatures(); boolean hasWindowedMagnificationFeature = false; for (Feature feature : features) { hasWindowedMagnificationFeature |= feature.getId() == FEATURE_WINDOWED_MAGNIFICATION; } assertThat(hasWindowedMagnificationFeature).isTrue(); } @Test public void testBuilder_defaultPolicy_hasFullscreenMagnificationFeature() { final DisplayAreaPolicy.Provider defaultProvider = DisplayAreaPolicy.Provider.fromResources( resourcesWithProvider("")); final DisplayAreaPolicyBuilder.Result defaultPolicy = (DisplayAreaPolicyBuilder.Result) defaultProvider.instantiate(mWms, mDisplayContent, mRoot, mImeContainer); final List<Feature> features = defaultPolicy.getFeatures(); boolean hasFullscreenMagnificationFeature = false; for (Feature feature : features) { hasFullscreenMagnificationFeature |= feature.getId() == FEATURE_FULLSCREEN_MAGNIFICATION; } assertThat(hasFullscreenMagnificationFeature).isTrue(); } @Test public void testBuilder_createCustomizedDisplayAreaForFeature() { final Feature dimmable; Loading