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

Commit 25e1e21f authored by Ryan Lin's avatar Ryan Lin Committed by Android (Google) Code Review
Browse files

Merge "Request connection for window magnification"

parents bfc7d918 b0d7008d
Loading
Loading
Loading
Loading
+0 −35
Original line number Diff line number Diff line
@@ -21,19 +21,15 @@ import android.annotation.NonNull;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.graphics.Rect;
import android.os.Handler;
import android.os.RemoteException;
import android.provider.Settings;
import android.util.Log;
import android.view.Display;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.IWindowMagnificationConnection;
import android.view.accessibility.IWindowMagnificationConnectionCallback;

import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.R;
import com.android.systemui.SystemUI;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.statusbar.CommandQueue;
@@ -89,37 +85,6 @@ public class WindowMagnification extends SystemUI implements WindowMagnifierCall
    @Override
    public void start() {
        mCommandQueue.addCallback(this);
        mContext.getContentResolver().registerContentObserver(
                Settings.Secure.getUriFor(Settings.Secure.WINDOW_MAGNIFICATION),
                true, new ContentObserver(mHandler) {
                    @Override
                    public void onChange(boolean selfChange) {
                        updateWindowMagnification();
                    }
                });
    }

    private void updateWindowMagnification() {
        try {
            boolean enable = Settings.Secure.getInt(mContext.getContentResolver(),
                    Settings.Secure.WINDOW_MAGNIFICATION) != 0;
            if (enable) {
                enableMagnification(
                        mContext.getResources().getInteger(R.integer.magnification_default_scale));
            } else {
                disableMagnification();
            }
        } catch (Settings.SettingNotFoundException e) {
            disableMagnification();
        }
    }

    private void enableMagnification(float scale) {
        enableWindowMagnification(Display.DEFAULT_DISPLAY, scale, Float.NaN, Float.NaN);
    }

    private void disableMagnification() {
        disableWindowMagnification(Display.DEFAULT_DISPLAY);
    }

    @MainThread
+23 −3
Original line number Diff line number Diff line
@@ -108,6 +108,7 @@ import com.android.internal.util.IntPair;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.accessibility.magnification.WindowMagnificationManager;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.wm.ActivityTaskManagerInternal;
import com.android.server.wm.WindowManagerInternal;

@@ -1368,7 +1369,26 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        return relevantEventTypes;
    }

    private void updateMagnificationModeChangeSettingsLocked() {
    private void updateMagnificationModeChangeSettingsLocked(AccessibilityUserState userState) {
        if (userState.mUserId != mCurrentUserId) {
            return;
        }

        final boolean windowMagnificationEnabled = userState.isShortcutMagnificationEnabledLocked()
                && (userState.getMagnificationModeLocked()
                == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);

        if (windowMagnificationEnabled == getWindowMagnificationMgr().isConnected()) {
            return;
        }
        final long identity = Binder.clearCallingIdentity();
        try {
            final StatusBarManagerInternal service = LocalServices.getService(
                    StatusBarManagerInternal.class);
            service.requestWindowMagnificationConnection(windowMagnificationEnabled);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
        mMainHandler.sendMessage(obtainMessage(
                AccessibilityManagerService::notifyMagnificationModeChangeToInputFilter,
                this));
@@ -1766,7 +1786,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        scheduleUpdateClientsIfNeededLocked(userState);
        updateAccessibilityShortcutKeyTargetsLocked(userState);
        updateAccessibilityButtonTargetsLocked(userState);
        updateMagnificationModeChangeSettingsLocked();
        updateMagnificationModeChangeSettingsLocked(userState);
    }

    private void updateWindowsForAccessibilityCallbackLocked(AccessibilityUserState userState) {
@@ -3097,7 +3117,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                    readUserRecommendedUiTimeoutSettingsLocked(userState);
                } else if (mMagnificationModeUri.equals(uri)) {
                    if (readMagnificationModeLocked(userState)) {
                        updateMagnificationModeChangeSettingsLocked();
                        updateMagnificationModeChangeSettingsLocked(userState);
                    }
                }
            }
+7 −0
Original line number Diff line number Diff line
@@ -107,6 +107,13 @@ public final class WindowMagnificationManager implements
        mUserId = userId;
    }

    /**
     *
     * @return {@code true} if {@link IWindowMagnificationConnection} is available
     */
    public boolean isConnected() {
        return mConnectionWrapper != null;
    }

    private void resetWindowMagnifiers() {
        synchronized (mLock) {
+9 −0
Original line number Diff line number Diff line
@@ -245,6 +245,15 @@ public class WindowMagnificationManagerTest {
        assertFalse(mWindowMagnificationManager.isWindowMagnifierEnabled(TEST_DISPLAY));
    }

    @Test
    public void isConnected_returnExpectedValue() throws RemoteException {
        assertFalse(mWindowMagnificationManager.isConnected());

        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());

        assertTrue(mWindowMagnificationManager.isConnected());
    }

    private MotionEvent generatePointersDownEvent(PointF[] pointersLocation) {
        final int len = pointersLocation.length;