Loading core/res/res/values/config.xml +4 −0 Original line number Diff line number Diff line Loading @@ -3792,6 +3792,10 @@ or empty if the default should be used. --> <string translatable="false" name="config_deviceSpecificAudioService"></string> <!-- Class name of the device specific implementation of DisplayAreaPolicy.Provider or empty if the default should be used. --> <string translatable="false" name="config_deviceSpecificDisplayAreaPolicyProvider"></string> <!-- Component name of media projection permission dialog --> <string name="config_mediaProjectionPermissionDialogComponent" translatable="false">com.android.systemui/com.android.systemui.media.MediaProjectionPermissionActivity</string> Loading core/res/res/values/symbols.xml +2 −0 Original line number Diff line number Diff line Loading @@ -3866,6 +3866,8 @@ <!-- Toast message for background started foreground service while-in-use permission restriction feature --> <java-symbol type="string" name="allow_while_in_use_permission_in_fgs" /> <java-symbol type="string" name="config_deviceSpecificDisplayAreaPolicyProvider" /> <!-- Whether to expand the lock screen user switcher by default --> <java-symbol type="bool" name="config_expandLockScreenUserSwitcher" /> </resources> services/core/java/com/android/server/wm/DisplayAreaPolicy.java +65 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ package com.android.server.wm; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; import android.content.res.Resources; import android.text.TextUtils; import com.android.server.wm.DisplayContent.TaskContainers; /** Loading @@ -42,7 +45,18 @@ public abstract class DisplayAreaPolicy { */ protected final TaskContainers mTaskContainers; DisplayAreaPolicy(WindowManagerService wmService, /** * Construct a new {@link DisplayAreaPolicy} * * @param wmService the window manager service instance * @param content the display content for which the policy applies * @param root the root display area under which the policy operates * @param imeContainer the ime container that the policy must attach * @param taskContainers the task container that the policy must attach * * @see #attachDisplayAreas() */ protected DisplayAreaPolicy(WindowManagerService wmService, DisplayContent content, DisplayArea.Root root, DisplayArea<? extends WindowContainer> imeContainer, TaskContainers taskContainers) { mWmService = wmService; Loading Loading @@ -119,5 +133,55 @@ public abstract class DisplayAreaPolicy { throw new IllegalArgumentException("don't know how to sort " + token); } } /** Provider for {@link DisplayAreaPolicy.Default platform-default display area policy}. */ static class Provider implements DisplayAreaPolicy.Provider { @Override public DisplayAreaPolicy instantiate(WindowManagerService wmService, DisplayContent content, DisplayArea.Root root, DisplayArea<? extends WindowContainer> imeContainer, TaskContainers taskContainers) { return new DisplayAreaPolicy.Default(wmService, content, root, imeContainer, taskContainers); } } } /** * Provider for {@link DisplayAreaPolicy} instances. * * By implementing this interface and overriding the * {@code config_deviceSpecificDisplayAreaPolicyProvider}, a device-specific implementations * of {@link DisplayAreaPolicy} can be supplied. */ public interface Provider { /** * Instantiate a new DisplayAreaPolicy. * * @see DisplayAreaPolicy#DisplayAreaPolicy */ DisplayAreaPolicy instantiate(WindowManagerService wmService, DisplayContent content, DisplayArea.Root root, DisplayArea<? extends WindowContainer> imeContainer, TaskContainers taskContainers); /** * Instantiate the device-specific {@link Provider}. */ static Provider fromResources(Resources res) { String name = res.getString( com.android.internal.R.string.config_deviceSpecificDisplayAreaPolicyProvider); if (TextUtils.isEmpty(name)) { return new DisplayAreaPolicy.Default.Provider(); } try { return (Provider) Class.forName(name).newInstance(); } catch (ReflectiveOperationException | ClassCastException e) { throw new IllegalStateException("Couldn't instantiate class " + name + " for config_deviceSpecificDisplayAreaPolicyProvider:" + " make sure it has a public zero-argument constructor" + " and implements DisplayAreaPolicy.Provider", e); } } } } services/core/java/com/android/server/wm/DisplayContent.java +3 −2 Original line number Diff line number Diff line Loading @@ -304,8 +304,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo private final DisplayArea.Root mRootDisplayArea = new DisplayArea.Root(mWmService); private final DisplayAreaPolicy mDisplayAreaPolicy = new DisplayAreaPolicy.Default( mWmService, this, mRootDisplayArea, mImeWindowsContainers, mTaskContainers); private final DisplayAreaPolicy mDisplayAreaPolicy; private WindowState mTmpWindow; private WindowState mTmpWindow2; Loading Loading @@ -1027,6 +1026,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo super.addChild(mWindowContainers, null); super.addChild(mOverlayContainers, null); mDisplayAreaPolicy = mWmService.mDisplayAreaPolicyProvider.instantiate( mWmService, this, mRootDisplayArea, mImeWindowsContainers, mTaskContainers); mWindowContainers.addChildren(); // Sets the display content for the children. Loading services/core/java/com/android/server/wm/WindowManagerService.java +6 −0 Original line number Diff line number Diff line Loading @@ -416,6 +416,8 @@ public class WindowManagerService extends IWindowManager.Stub final WindowTracing mWindowTracing; final DisplayAreaPolicy.Provider mDisplayAreaPolicyProvider; final private KeyguardDisableHandler mKeyguardDisableHandler; // TODO: eventually unify all keyguard state in a common place instead of having it spread over // AM's KeyguardController and the policy's KeyguardServiceDelegate. Loading Loading @@ -1265,6 +1267,10 @@ public class WindowManagerService extends IWindowManager.Stub LocalServices.addService(WindowManagerInternal.class, new LocalService()); mEmbeddedWindowController = new EmbeddedWindowController(mGlobalLock); mDisplayAreaPolicyProvider = DisplayAreaPolicy.Provider.fromResources( mContext.getResources()); setGlobalShadowSettings(); } Loading Loading
core/res/res/values/config.xml +4 −0 Original line number Diff line number Diff line Loading @@ -3792,6 +3792,10 @@ or empty if the default should be used. --> <string translatable="false" name="config_deviceSpecificAudioService"></string> <!-- Class name of the device specific implementation of DisplayAreaPolicy.Provider or empty if the default should be used. --> <string translatable="false" name="config_deviceSpecificDisplayAreaPolicyProvider"></string> <!-- Component name of media projection permission dialog --> <string name="config_mediaProjectionPermissionDialogComponent" translatable="false">com.android.systemui/com.android.systemui.media.MediaProjectionPermissionActivity</string> Loading
core/res/res/values/symbols.xml +2 −0 Original line number Diff line number Diff line Loading @@ -3866,6 +3866,8 @@ <!-- Toast message for background started foreground service while-in-use permission restriction feature --> <java-symbol type="string" name="allow_while_in_use_permission_in_fgs" /> <java-symbol type="string" name="config_deviceSpecificDisplayAreaPolicyProvider" /> <!-- Whether to expand the lock screen user switcher by default --> <java-symbol type="bool" name="config_expandLockScreenUserSwitcher" /> </resources>
services/core/java/com/android/server/wm/DisplayAreaPolicy.java +65 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ package com.android.server.wm; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; import android.content.res.Resources; import android.text.TextUtils; import com.android.server.wm.DisplayContent.TaskContainers; /** Loading @@ -42,7 +45,18 @@ public abstract class DisplayAreaPolicy { */ protected final TaskContainers mTaskContainers; DisplayAreaPolicy(WindowManagerService wmService, /** * Construct a new {@link DisplayAreaPolicy} * * @param wmService the window manager service instance * @param content the display content for which the policy applies * @param root the root display area under which the policy operates * @param imeContainer the ime container that the policy must attach * @param taskContainers the task container that the policy must attach * * @see #attachDisplayAreas() */ protected DisplayAreaPolicy(WindowManagerService wmService, DisplayContent content, DisplayArea.Root root, DisplayArea<? extends WindowContainer> imeContainer, TaskContainers taskContainers) { mWmService = wmService; Loading Loading @@ -119,5 +133,55 @@ public abstract class DisplayAreaPolicy { throw new IllegalArgumentException("don't know how to sort " + token); } } /** Provider for {@link DisplayAreaPolicy.Default platform-default display area policy}. */ static class Provider implements DisplayAreaPolicy.Provider { @Override public DisplayAreaPolicy instantiate(WindowManagerService wmService, DisplayContent content, DisplayArea.Root root, DisplayArea<? extends WindowContainer> imeContainer, TaskContainers taskContainers) { return new DisplayAreaPolicy.Default(wmService, content, root, imeContainer, taskContainers); } } } /** * Provider for {@link DisplayAreaPolicy} instances. * * By implementing this interface and overriding the * {@code config_deviceSpecificDisplayAreaPolicyProvider}, a device-specific implementations * of {@link DisplayAreaPolicy} can be supplied. */ public interface Provider { /** * Instantiate a new DisplayAreaPolicy. * * @see DisplayAreaPolicy#DisplayAreaPolicy */ DisplayAreaPolicy instantiate(WindowManagerService wmService, DisplayContent content, DisplayArea.Root root, DisplayArea<? extends WindowContainer> imeContainer, TaskContainers taskContainers); /** * Instantiate the device-specific {@link Provider}. */ static Provider fromResources(Resources res) { String name = res.getString( com.android.internal.R.string.config_deviceSpecificDisplayAreaPolicyProvider); if (TextUtils.isEmpty(name)) { return new DisplayAreaPolicy.Default.Provider(); } try { return (Provider) Class.forName(name).newInstance(); } catch (ReflectiveOperationException | ClassCastException e) { throw new IllegalStateException("Couldn't instantiate class " + name + " for config_deviceSpecificDisplayAreaPolicyProvider:" + " make sure it has a public zero-argument constructor" + " and implements DisplayAreaPolicy.Provider", e); } } } }
services/core/java/com/android/server/wm/DisplayContent.java +3 −2 Original line number Diff line number Diff line Loading @@ -304,8 +304,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo private final DisplayArea.Root mRootDisplayArea = new DisplayArea.Root(mWmService); private final DisplayAreaPolicy mDisplayAreaPolicy = new DisplayAreaPolicy.Default( mWmService, this, mRootDisplayArea, mImeWindowsContainers, mTaskContainers); private final DisplayAreaPolicy mDisplayAreaPolicy; private WindowState mTmpWindow; private WindowState mTmpWindow2; Loading Loading @@ -1027,6 +1026,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo super.addChild(mWindowContainers, null); super.addChild(mOverlayContainers, null); mDisplayAreaPolicy = mWmService.mDisplayAreaPolicyProvider.instantiate( mWmService, this, mRootDisplayArea, mImeWindowsContainers, mTaskContainers); mWindowContainers.addChildren(); // Sets the display content for the children. Loading
services/core/java/com/android/server/wm/WindowManagerService.java +6 −0 Original line number Diff line number Diff line Loading @@ -416,6 +416,8 @@ public class WindowManagerService extends IWindowManager.Stub final WindowTracing mWindowTracing; final DisplayAreaPolicy.Provider mDisplayAreaPolicyProvider; final private KeyguardDisableHandler mKeyguardDisableHandler; // TODO: eventually unify all keyguard state in a common place instead of having it spread over // AM's KeyguardController and the policy's KeyguardServiceDelegate. Loading Loading @@ -1265,6 +1267,10 @@ public class WindowManagerService extends IWindowManager.Stub LocalServices.addService(WindowManagerInternal.class, new LocalService()); mEmbeddedWindowController = new EmbeddedWindowController(mGlobalLock); mDisplayAreaPolicyProvider = DisplayAreaPolicy.Provider.fromResources( mContext.getResources()); setGlobalShadowSettings(); } Loading