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

Commit 3acbfc73 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Allow devices override default behavior of magnify NavBar and IME" into main

parents 9fba9670 d2da52c3
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import android.text.TextUtils;
import android.util.ArraySet;
import android.view.accessibility.AccessibilityManager;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;

import libcore.util.EmptyArray;
@@ -372,4 +373,15 @@ public final class AccessibilityUtils {
        }
        return null;
    }

    /**
     * Returns the default value for
     * {@link android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME}.
     *
     * @return The {@link State} whether the default value is on or off.
     */
    public static int getMagnificationMagnifyKeyboardDefaultValue(Context context) {
        return context.getResources().getBoolean(
                R.bool.config_magnification_magnify_keyboard_default) ? State.ON : State.OFF;
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -4163,6 +4163,9 @@
    <!-- Whether to keep fullscreen magnification zoom level when context changes. -->
    <bool name="config_magnification_keep_zoom_level_when_context_changed">false</bool>

    <!-- The default value whether to magnify IME and keyboard with fullscreen magnification . -->
    <bool name="config_magnification_magnify_keyboard_default">false</bool>

    <!-- If true, the display will be shifted around in ambient mode. -->
    <bool name="config_enableBurnInProtection">false</bool>

+1 −0
Original line number Diff line number Diff line
@@ -4960,6 +4960,7 @@
  <java-symbol type="bool" name="config_magnification_area" />
  <java-symbol type="bool" name="config_magnification_always_on_enabled" />
  <java-symbol type="bool" name="config_magnification_keep_zoom_level_when_context_changed" />
  <java-symbol type="bool" name="config_magnification_magnify_keyboard_default" />

  <java-symbol type="bool" name="config_trackerAppNeedsPermissions"/>
  <!-- FullScreenMagnification thumbnail -->
+5 −3
Original line number Diff line number Diff line
@@ -326,6 +326,7 @@ import android.window.WindowContainerToken;
import android.window.WindowContextInfo;

import com.android.internal.R;
import com.android.internal.accessibility.util.AccessibilityUtils;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting.Visibility;
@@ -1050,7 +1051,8 @@ public class WindowManagerService extends IWindowManager.Stub
            boolean enabledMagnifyNavAndIme = Settings.Secure.getIntForUser(
                    mContext.getContentResolver(),
                    Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME,
                    0, mCurrentUserId) == 1;
                    AccessibilityUtils.getMagnificationMagnifyKeyboardDefaultValue(mContext),
                    mCurrentUserId) == 1;
            if (mMagnifyNavAndIme == enabledMagnifyNavAndIme) {
                return;
            }
+55 −2
Original line number Diff line number Diff line
@@ -42,10 +42,10 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
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_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.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY;
@@ -120,6 +120,7 @@ import android.window.TaskFragmentOrganizer;

import androidx.test.filters.SmallTest;

import com.android.internal.R;
import com.android.server.inputmethod.InputMethodManagerInternal;
import com.android.server.testutils.StubTransaction;
import com.android.server.wm.SensitiveContentPackages.PackageInfo;
@@ -374,6 +375,58 @@ public class WindowStateTests extends WindowTestsBase {
        assertTrue(navWindow.shouldMagnify());
    }

    @Test
    @EnableFlags(com.android.server.accessibility
            .Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void testMagnifyNavAndIme_flagOnAndDefaultEnable_typeIsIme_shouldMagnify() {
        useFakeSettingsProvider();  // This resets the Settings.Secure value.
        spyOn(mContext.getResources());
        when(mContext.getResources().getBoolean(
                R.bool.config_magnification_magnify_keyboard_default)).thenReturn(true);

        final WindowState imeWindow = newWindowBuilder("imeWindow", TYPE_INPUT_METHOD).build();
        final WindowState imeDialogWindow =
                newWindowBuilder("imeDialogWindow", TYPE_INPUT_METHOD_DIALOG).build();
        final WindowState navWindow = newWindowBuilder("navWindow", TYPE_NAVIGATION_BAR).build();

        imeWindow.setHasSurface(true);
        imeDialogWindow.setHasSurface(true);
        navWindow.setHasSurface(true);

        mWm.mSettingsObserver.loadSettings();

        assertTrue(mWm.isMagnifyNavAndImeEnabled());
        assertTrue(imeWindow.shouldMagnify());
        assertTrue(imeDialogWindow.shouldMagnify());
        assertTrue(navWindow.shouldMagnify());
    }

    @Test
    @EnableFlags(com.android.server.accessibility
            .Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void testMagnifyNavAndIme_flagOnAndDefaultDisable_typeIsIme_shouldNotMagnify() {
        useFakeSettingsProvider();  // This resets the Settings.Secure value.
        spyOn(mContext.getResources());
        when(mContext.getResources().getBoolean(
                R.bool.config_magnification_magnify_keyboard_default)).thenReturn(false);

        final WindowState imeWindow = newWindowBuilder("imeWindow", TYPE_INPUT_METHOD).build();
        final WindowState imeDialogWindow =
                newWindowBuilder("imeDialogWindow", TYPE_INPUT_METHOD_DIALOG).build();
        final WindowState navWindow = newWindowBuilder("navWindow", TYPE_NAVIGATION_BAR).build();

        imeWindow.setHasSurface(true);
        imeDialogWindow.setHasSurface(true);
        navWindow.setHasSurface(true);

        mWm.mSettingsObserver.loadSettings();

        assertFalse(mWm.isMagnifyNavAndImeEnabled());
        assertFalse(imeWindow.shouldMagnify());
        assertFalse(imeDialogWindow.shouldMagnify());
        assertFalse(navWindow.shouldMagnify());
    }

    @Test
    public void testCanBeImeLayeringTarget() {
        final WindowState appWindow = newWindowBuilder("appWindow", TYPE_APPLICATION).build();