Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java +20 −20 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.os.ServiceManager; import android.util.Slog; import android.util.SparseArray; import android.view.IDisplayWindowInsetsController; import android.view.IWindowManager; import android.view.InsetsSource; import android.view.InsetsSourceControl; import android.view.InsetsState; Loading Loading @@ -60,20 +61,20 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged private static final int DIRECTION_HIDE = 2; private static final int FLOATING_IME_BOTTOM_INSET = -80; protected final SystemWindows mSystemWindows; protected final IWindowManager mWmService; protected final Handler mHandler; final TransactionPool mTransactionPool; final SparseArray<PerDisplay> mImePerDisplay = new SparseArray<>(); final ArrayList<ImePositionProcessor> mPositionProcessors = new ArrayList<>(); public DisplayImeController(SystemWindows syswin, DisplayController displayController, Handler handler, TransactionPool transactionPool) { mHandler = handler; mSystemWindows = syswin; private final TransactionPool mTransactionPool; private final DisplayController mDisplayController; private final SparseArray<PerDisplay> mImePerDisplay = new SparseArray<>(); private final ArrayList<ImePositionProcessor> mPositionProcessors = new ArrayList<>(); public DisplayImeController(IWindowManager wmService, DisplayController displayController, Handler mainHandler, TransactionPool transactionPool) { mHandler = mainHandler; mWmService = wmService; mTransactionPool = transactionPool; displayController.addDisplayWindowListener(this); mDisplayController = displayController; mDisplayController.addDisplayWindowListener(this); } @Override Loading @@ -81,9 +82,9 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // Add's a system-ui window-manager specifically for ime. This type is special because // WM will defer IME inset handling to it in multi-window scenarious. PerDisplay pd = new PerDisplay(displayId, mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation()); mDisplayController.getDisplayLayout(displayId).rotation()); try { mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, pd); mWmService.setDisplayWindowInsetsController(displayId, pd); } catch (RemoteException e) { Slog.w(TAG, "Unable to set insets controller on display " + displayId); } Loading @@ -96,7 +97,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged if (pd == null) { return; } if (mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation() if (mDisplayController.getDisplayLayout(displayId).rotation() != pd.mRotation && isImeShowing(displayId)) { pd.startAnimation(true, false /* forceRestart */); } Loading @@ -105,7 +106,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged @Override public void onDisplayRemoved(int displayId) { try { mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, null); mWmService.setDisplayWindowInsetsController(displayId, null); } catch (RemoteException e) { Slog.w(TAG, "Unable to remove insets controller on display " + displayId); } Loading Loading @@ -263,7 +264,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged private void setVisibleDirectly(boolean visible) { mInsetsState.getSource(InsetsState.ITYPE_IME).setVisible(visible); try { mSystemWindows.mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); } catch (RemoteException e) { } } Loading @@ -282,7 +283,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // an IME inset). For now, we assume that no non-floating IME will be <= this nav bar // frame height so any reported frame that is <= nav-bar frame height is assumed to // be floating. return frame.height() <= mSystemWindows.mDisplayController.getDisplayLayout(mDisplayId) return frame.height() <= mDisplayController.getDisplayLayout(mDisplayId) .navBarFrameHeight(); } Loading @@ -297,8 +298,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // This is a "floating" or "expanded" IME, so to get animations, just // pretend the ime has some size just below the screen. mImeFrame.set(newFrame); final int floatingInset = (int) ( mSystemWindows.mDisplayController.getDisplayLayout(mDisplayId) final int floatingInset = (int) (mDisplayController.getDisplayLayout(mDisplayId) .density() * FLOATING_IME_BOTTOM_INSET); mImeFrame.bottom -= floatingInset; } else if (newFrame.height() != 0) { Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java +8 −11 Original line number Diff line number Diff line Loading @@ -60,11 +60,10 @@ public class SystemWindows { private static final String TAG = "SystemWindows"; private final SparseArray<PerDisplay> mPerDisplay = new SparseArray<>(); final HashMap<View, SurfaceControlViewHost> mViewRoots = new HashMap<>(); public Context mContext; public IWindowManager mWmService; IWindowSession mSession; DisplayController mDisplayController; private final HashMap<View, SurfaceControlViewHost> mViewRoots = new HashMap<>(); private final DisplayController mDisplayController; private final IWindowManager mWmService; private IWindowSession mSession; private final DisplayController.OnDisplaysChangedListener mDisplayListener = new DisplayController.OnDisplaysChangedListener() { Loading @@ -84,9 +83,7 @@ public class SystemWindows { public void onDisplayRemoved(int displayId) { } }; public SystemWindows(Context context, DisplayController displayController, IWindowManager wmService) { mContext = context; public SystemWindows(DisplayController displayController, IWindowManager wmService) { mWmService = wmService; mDisplayController = displayController; mDisplayController.addDisplayWindowListener(mDisplayListener); Loading Loading @@ -210,8 +207,8 @@ public class SystemWindows { } final Display display = mDisplayController.getDisplay(mDisplayId); SurfaceControlViewHost viewRoot = new SurfaceControlViewHost(mContext, display, wwm, true /* useSfChoreographer */); new SurfaceControlViewHost( view.getContext(), display, wwm, true /* useSfChoreographer */); attrs.flags |= FLAG_HARDWARE_ACCELERATED; viewRoot.setView(view, attrs); mViewRoots.put(view, viewRoot); Loading Loading @@ -313,7 +310,7 @@ public class SystemWindows { } } class ContainerWindow extends IWindow.Stub { static class ContainerWindow extends IWindow.Stub { ContainerWindow() {} @Override Loading packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java +2 −2 Original line number Diff line number Diff line Loading @@ -128,9 +128,9 @@ public abstract class CarSystemUIModule { @Singleton @Provides static SystemWindows provideSystemWindows(Context context, DisplayController displayController, static SystemWindows provideSystemWindows(DisplayController displayController, IWindowManager wmService) { return new SystemWindows(context, displayController, wmService); return new SystemWindows(displayController, wmService); } @Singleton Loading packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java +12 −8 Original line number Diff line number Diff line Loading @@ -16,12 +16,14 @@ package com.android.systemui.wm; import android.content.Context; import android.os.Handler; import android.os.RemoteException; import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; import android.view.IDisplayWindowInsetsController; import android.view.IWindowManager; import android.view.InsetsController; import android.view.InsetsSourceControl; import android.view.InsetsState; Loading @@ -32,7 +34,6 @@ import androidx.annotation.VisibleForTesting; import com.android.systemui.dagger.qualifiers.Main; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayImeController; import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.common.TransactionPool; import javax.inject.Inject; Loading @@ -50,29 +51,32 @@ public class DisplaySystemBarsController extends DisplayImeController { private static final String TAG = "DisplaySystemBarsController"; private SparseArray<PerDisplay> mPerDisplaySparseArray; private final Context mContext; @Inject public DisplaySystemBarsController( SystemWindows syswin, Context context, IWindowManager wmService, DisplayController displayController, @Main Handler mainHandler, TransactionPool transactionPool) { super(syswin, displayController, mainHandler, transactionPool); super(wmService, displayController, mainHandler, transactionPool); mContext = context; } @Override public void onDisplayAdded(int displayId) { PerDisplay pd = new PerDisplay(displayId); try { mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, pd); mWmService.setDisplayWindowInsetsController(displayId, pd); } catch (RemoteException e) { Slog.w(TAG, "Unable to set insets controller on display " + displayId); } // Lazy loading policy control filters instead of during boot. if (mPerDisplaySparseArray == null) { mPerDisplaySparseArray = new SparseArray<>(); BarControlPolicy.reloadFromSetting(mSystemWindows.mContext); BarControlPolicy.registerContentObserver(mSystemWindows.mContext, mHandler, () -> { BarControlPolicy.reloadFromSetting(mContext); BarControlPolicy.registerContentObserver(mContext, mHandler, () -> { int size = mPerDisplaySparseArray.size(); for (int i = 0; i < size; i++) { mPerDisplaySparseArray.valueAt(i).modifyDisplayWindowInsets(); Loading @@ -85,7 +89,7 @@ public class DisplaySystemBarsController extends DisplayImeController { @Override public void onDisplayRemoved(int displayId) { try { mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, null); mWmService.setDisplayWindowInsetsController(displayId, null); } catch (RemoteException e) { Slog.w(TAG, "Unable to remove insets controller on display " + displayId); } Loading Loading @@ -155,7 +159,7 @@ public class DisplaySystemBarsController extends DisplayImeController { showInsets(barVisibilities[0], /* fromIme= */ false); hideInsets(barVisibilities[1], /* fromIme= */ false); try { mSystemWindows.mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); } catch (RemoteException e) { Slog.w(TAG, "Unable to update window manager service."); } Loading packages/CarSystemUI/tests/src/com/android/systemui/wm/DisplaySystemBarsControllerTest.java +2 −6 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.common.TransactionPool; import org.junit.Before; Loading @@ -52,8 +51,6 @@ public class DisplaySystemBarsControllerTest extends SysuiTestCase { private static final int DISPLAY_ID = 1; @Mock private SystemWindows mSystemWindows; @Mock private IWindowManager mIWindowManager; @Mock Loading @@ -66,11 +63,10 @@ public class DisplaySystemBarsControllerTest extends SysuiTestCase { @Before public void setUp() { MockitoAnnotations.initMocks(this); mSystemWindows.mContext = mContext; mSystemWindows.mWmService = mIWindowManager; mController = new DisplaySystemBarsController( mSystemWindows, mContext, mIWindowManager, mDisplayController, mHandler, mTransactionPool Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java +20 −20 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.os.ServiceManager; import android.util.Slog; import android.util.SparseArray; import android.view.IDisplayWindowInsetsController; import android.view.IWindowManager; import android.view.InsetsSource; import android.view.InsetsSourceControl; import android.view.InsetsState; Loading Loading @@ -60,20 +61,20 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged private static final int DIRECTION_HIDE = 2; private static final int FLOATING_IME_BOTTOM_INSET = -80; protected final SystemWindows mSystemWindows; protected final IWindowManager mWmService; protected final Handler mHandler; final TransactionPool mTransactionPool; final SparseArray<PerDisplay> mImePerDisplay = new SparseArray<>(); final ArrayList<ImePositionProcessor> mPositionProcessors = new ArrayList<>(); public DisplayImeController(SystemWindows syswin, DisplayController displayController, Handler handler, TransactionPool transactionPool) { mHandler = handler; mSystemWindows = syswin; private final TransactionPool mTransactionPool; private final DisplayController mDisplayController; private final SparseArray<PerDisplay> mImePerDisplay = new SparseArray<>(); private final ArrayList<ImePositionProcessor> mPositionProcessors = new ArrayList<>(); public DisplayImeController(IWindowManager wmService, DisplayController displayController, Handler mainHandler, TransactionPool transactionPool) { mHandler = mainHandler; mWmService = wmService; mTransactionPool = transactionPool; displayController.addDisplayWindowListener(this); mDisplayController = displayController; mDisplayController.addDisplayWindowListener(this); } @Override Loading @@ -81,9 +82,9 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // Add's a system-ui window-manager specifically for ime. This type is special because // WM will defer IME inset handling to it in multi-window scenarious. PerDisplay pd = new PerDisplay(displayId, mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation()); mDisplayController.getDisplayLayout(displayId).rotation()); try { mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, pd); mWmService.setDisplayWindowInsetsController(displayId, pd); } catch (RemoteException e) { Slog.w(TAG, "Unable to set insets controller on display " + displayId); } Loading @@ -96,7 +97,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged if (pd == null) { return; } if (mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation() if (mDisplayController.getDisplayLayout(displayId).rotation() != pd.mRotation && isImeShowing(displayId)) { pd.startAnimation(true, false /* forceRestart */); } Loading @@ -105,7 +106,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged @Override public void onDisplayRemoved(int displayId) { try { mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, null); mWmService.setDisplayWindowInsetsController(displayId, null); } catch (RemoteException e) { Slog.w(TAG, "Unable to remove insets controller on display " + displayId); } Loading Loading @@ -263,7 +264,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged private void setVisibleDirectly(boolean visible) { mInsetsState.getSource(InsetsState.ITYPE_IME).setVisible(visible); try { mSystemWindows.mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); } catch (RemoteException e) { } } Loading @@ -282,7 +283,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // an IME inset). For now, we assume that no non-floating IME will be <= this nav bar // frame height so any reported frame that is <= nav-bar frame height is assumed to // be floating. return frame.height() <= mSystemWindows.mDisplayController.getDisplayLayout(mDisplayId) return frame.height() <= mDisplayController.getDisplayLayout(mDisplayId) .navBarFrameHeight(); } Loading @@ -297,8 +298,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // This is a "floating" or "expanded" IME, so to get animations, just // pretend the ime has some size just below the screen. mImeFrame.set(newFrame); final int floatingInset = (int) ( mSystemWindows.mDisplayController.getDisplayLayout(mDisplayId) final int floatingInset = (int) (mDisplayController.getDisplayLayout(mDisplayId) .density() * FLOATING_IME_BOTTOM_INSET); mImeFrame.bottom -= floatingInset; } else if (newFrame.height() != 0) { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java +8 −11 Original line number Diff line number Diff line Loading @@ -60,11 +60,10 @@ public class SystemWindows { private static final String TAG = "SystemWindows"; private final SparseArray<PerDisplay> mPerDisplay = new SparseArray<>(); final HashMap<View, SurfaceControlViewHost> mViewRoots = new HashMap<>(); public Context mContext; public IWindowManager mWmService; IWindowSession mSession; DisplayController mDisplayController; private final HashMap<View, SurfaceControlViewHost> mViewRoots = new HashMap<>(); private final DisplayController mDisplayController; private final IWindowManager mWmService; private IWindowSession mSession; private final DisplayController.OnDisplaysChangedListener mDisplayListener = new DisplayController.OnDisplaysChangedListener() { Loading @@ -84,9 +83,7 @@ public class SystemWindows { public void onDisplayRemoved(int displayId) { } }; public SystemWindows(Context context, DisplayController displayController, IWindowManager wmService) { mContext = context; public SystemWindows(DisplayController displayController, IWindowManager wmService) { mWmService = wmService; mDisplayController = displayController; mDisplayController.addDisplayWindowListener(mDisplayListener); Loading Loading @@ -210,8 +207,8 @@ public class SystemWindows { } final Display display = mDisplayController.getDisplay(mDisplayId); SurfaceControlViewHost viewRoot = new SurfaceControlViewHost(mContext, display, wwm, true /* useSfChoreographer */); new SurfaceControlViewHost( view.getContext(), display, wwm, true /* useSfChoreographer */); attrs.flags |= FLAG_HARDWARE_ACCELERATED; viewRoot.setView(view, attrs); mViewRoots.put(view, viewRoot); Loading Loading @@ -313,7 +310,7 @@ public class SystemWindows { } } class ContainerWindow extends IWindow.Stub { static class ContainerWindow extends IWindow.Stub { ContainerWindow() {} @Override Loading
packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java +2 −2 Original line number Diff line number Diff line Loading @@ -128,9 +128,9 @@ public abstract class CarSystemUIModule { @Singleton @Provides static SystemWindows provideSystemWindows(Context context, DisplayController displayController, static SystemWindows provideSystemWindows(DisplayController displayController, IWindowManager wmService) { return new SystemWindows(context, displayController, wmService); return new SystemWindows(displayController, wmService); } @Singleton Loading
packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java +12 −8 Original line number Diff line number Diff line Loading @@ -16,12 +16,14 @@ package com.android.systemui.wm; import android.content.Context; import android.os.Handler; import android.os.RemoteException; import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; import android.view.IDisplayWindowInsetsController; import android.view.IWindowManager; import android.view.InsetsController; import android.view.InsetsSourceControl; import android.view.InsetsState; Loading @@ -32,7 +34,6 @@ import androidx.annotation.VisibleForTesting; import com.android.systemui.dagger.qualifiers.Main; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayImeController; import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.common.TransactionPool; import javax.inject.Inject; Loading @@ -50,29 +51,32 @@ public class DisplaySystemBarsController extends DisplayImeController { private static final String TAG = "DisplaySystemBarsController"; private SparseArray<PerDisplay> mPerDisplaySparseArray; private final Context mContext; @Inject public DisplaySystemBarsController( SystemWindows syswin, Context context, IWindowManager wmService, DisplayController displayController, @Main Handler mainHandler, TransactionPool transactionPool) { super(syswin, displayController, mainHandler, transactionPool); super(wmService, displayController, mainHandler, transactionPool); mContext = context; } @Override public void onDisplayAdded(int displayId) { PerDisplay pd = new PerDisplay(displayId); try { mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, pd); mWmService.setDisplayWindowInsetsController(displayId, pd); } catch (RemoteException e) { Slog.w(TAG, "Unable to set insets controller on display " + displayId); } // Lazy loading policy control filters instead of during boot. if (mPerDisplaySparseArray == null) { mPerDisplaySparseArray = new SparseArray<>(); BarControlPolicy.reloadFromSetting(mSystemWindows.mContext); BarControlPolicy.registerContentObserver(mSystemWindows.mContext, mHandler, () -> { BarControlPolicy.reloadFromSetting(mContext); BarControlPolicy.registerContentObserver(mContext, mHandler, () -> { int size = mPerDisplaySparseArray.size(); for (int i = 0; i < size; i++) { mPerDisplaySparseArray.valueAt(i).modifyDisplayWindowInsets(); Loading @@ -85,7 +89,7 @@ public class DisplaySystemBarsController extends DisplayImeController { @Override public void onDisplayRemoved(int displayId) { try { mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, null); mWmService.setDisplayWindowInsetsController(displayId, null); } catch (RemoteException e) { Slog.w(TAG, "Unable to remove insets controller on display " + displayId); } Loading Loading @@ -155,7 +159,7 @@ public class DisplaySystemBarsController extends DisplayImeController { showInsets(barVisibilities[0], /* fromIme= */ false); hideInsets(barVisibilities[1], /* fromIme= */ false); try { mSystemWindows.mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); } catch (RemoteException e) { Slog.w(TAG, "Unable to update window manager service."); } Loading
packages/CarSystemUI/tests/src/com/android/systemui/wm/DisplaySystemBarsControllerTest.java +2 −6 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.common.TransactionPool; import org.junit.Before; Loading @@ -52,8 +51,6 @@ public class DisplaySystemBarsControllerTest extends SysuiTestCase { private static final int DISPLAY_ID = 1; @Mock private SystemWindows mSystemWindows; @Mock private IWindowManager mIWindowManager; @Mock Loading @@ -66,11 +63,10 @@ public class DisplaySystemBarsControllerTest extends SysuiTestCase { @Before public void setUp() { MockitoAnnotations.initMocks(this); mSystemWindows.mContext = mContext; mSystemWindows.mWmService = mIWindowManager; mController = new DisplaySystemBarsController( mSystemWindows, mContext, mIWindowManager, mDisplayController, mHandler, mTransactionPool Loading