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

Commit 6a98dde8 authored by Alan Viverette's avatar Alan Viverette Committed by Android Git Automerger
Browse files

am 9342b049: Merge "Use default token instead of wrapped window manager" into lmp-mr1-dev

* commit '9342b049':
  Use default token instead of wrapped window manager
parents 53a5acd0 9342b049
Loading
Loading
Loading
Loading
+4 −64
Original line number Diff line number Diff line
@@ -24,11 +24,9 @@ import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityInteractionClient;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -620,18 +618,6 @@ public abstract class AccessibilityService extends Service {
        }
    }

    @Override
    public Object getSystemService(String name) {
        if (Context.WINDOW_SERVICE.equals(name)) {
            if (mWindowManager == null) {
                WindowManager wrapped = (WindowManager) super.getSystemService(name);
                mWindowManager = new LocalWindowManager(wrapped);
            }
            return mWindowManager;
        }
        return super.getSystemService(name);
    }

    /**
     * Implement to return the implementation of the internal accessibility
     * service interface.
@@ -658,6 +644,9 @@ public abstract class AccessibilityService extends Service {
            public void init(int connectionId, IBinder windowToken) {
                mConnectionId = connectionId;
                mWindowToken = windowToken;

                // Let the window manager know about our shiny new token.
                WindowManagerGlobal.getInstance().setDefaultToken(mWindowToken);
            }

            @Override
@@ -812,53 +801,4 @@ public abstract class AccessibilityService extends Service {
            }
        }
    }

    private class LocalWindowManager implements WindowManager {
        private final WindowManager mImpl;

        private LocalWindowManager(WindowManager impl) {
            mImpl = impl;
        }

        @Override
        public Display getDefaultDisplay() {
            return mImpl.getDefaultDisplay();
        }

        @Override
        public void addView(View view, ViewGroup.LayoutParams params) {
            if (!(params instanceof WindowManager.LayoutParams)) {
                throw new IllegalArgumentException("Params must be WindowManager.LayoutParams");
            }
            WindowManager.LayoutParams windowParams = (WindowManager.LayoutParams) params;
            if (windowParams.type == LayoutParams.TYPE_ACCESSIBILITY_OVERLAY
                    && windowParams.token == null) {
                windowParams.token = mWindowToken;
            }
            mImpl.addView(view, params);
        }

        @Override
        public void updateViewLayout(View view, ViewGroup.LayoutParams params) {
            if (!(params instanceof WindowManager.LayoutParams)) {
                throw new IllegalArgumentException("Params must be WindowManager.LayoutParams");
            }
            WindowManager.LayoutParams windowParams = (WindowManager.LayoutParams) params;
            if (windowParams.type == LayoutParams.TYPE_ACCESSIBILITY_OVERLAY
                    && windowParams.token == null) {
                windowParams.token = mWindowToken;
            }
            mImpl.updateViewLayout(view, params);
        }

        @Override
        public void removeViewImmediate(View view) {
            mImpl.removeViewImmediate(view);
        }

        @Override
        public void removeView(View view) {
            mImpl.removeView(view);
        }
    }
}
+18 −0
Original line number Diff line number Diff line
@@ -118,6 +118,9 @@ public final class WindowManagerGlobal {

    private Runnable mSystemPropertyUpdater;

    /** Default token to apply to added views. */
    private IBinder mDefaultToken;

    private WindowManagerGlobal() {
    }

@@ -169,6 +172,17 @@ public final class WindowManagerGlobal {
        }
    }

    /**
     * Sets the default token to use in {@link #addView} when no parent window
     * token is available and no token has been explicitly set in the view's
     * layout params.
     *
     * @param token Default window token to apply to added views.
     */
    public void setDefaultToken(IBinder token) {
        mDefaultToken = token;
    }

    public String[] getViewRootNames() {
        synchronized (mLock) {
            final int numRoots = mRoots.size();
@@ -216,6 +230,10 @@ public final class WindowManagerGlobal {
            }
        }

        if (wparams.token == null && mDefaultToken != null) {
            wparams.token = mDefaultToken;
        }

        ViewRootImpl root;
        View panelParentView = null;