Suppress transient bars over dreams. am: 982ecde2d5
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22101926 Change-Id: I26c327d011a83a1375a36dddd1e0191d20a93367 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -2148,6 +2148,14 @@ public class DisplayPolicy {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (controlTarget != null) {
|
||||||
|
final WindowState win = controlTarget.getWindow();
|
||||||
|
|
||||||
|
if (win != null && win.isActivityTypeDream()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final @InsetsType int restorePositionTypes =
|
final @InsetsType int restorePositionTypes =
|
||||||
(controlTarget.getRequestedVisibility(ITYPE_NAVIGATION_BAR)
|
(controlTarget.getRequestedVisibility(ITYPE_NAVIGATION_BAR)
|
||||||
? Type.navigationBars() : 0)
|
? Type.navigationBars() : 0)
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import static android.view.Surface.ROTATION_0;
|
|||||||
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
||||||
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
|
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||||
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
|
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
|
||||||
|
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
||||||
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
||||||
import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND;
|
import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND;
|
||||||
import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
|
import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
|
||||||
@@ -59,6 +60,7 @@ import android.platform.test.annotations.Presubmit;
|
|||||||
import android.view.DisplayInfo;
|
import android.view.DisplayInfo;
|
||||||
import android.view.InsetsSource;
|
import android.view.InsetsSource;
|
||||||
import android.view.InsetsState;
|
import android.view.InsetsState;
|
||||||
|
import android.view.InsetsVisibilities;
|
||||||
import android.view.PrivacyIndicatorBounds;
|
import android.view.PrivacyIndicatorBounds;
|
||||||
import android.view.WindowInsets.Side;
|
import android.view.WindowInsets.Side;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
@@ -85,6 +87,17 @@ public class DisplayPolicyTests extends WindowTestsBase {
|
|||||||
return win;
|
return win;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private WindowState createDreamWindow() {
|
||||||
|
final WindowState win = createDreamWindow(null, TYPE_BASE_APPLICATION, "dream");
|
||||||
|
final WindowManager.LayoutParams attrs = win.mAttrs;
|
||||||
|
attrs.width = MATCH_PARENT;
|
||||||
|
attrs.height = MATCH_PARENT;
|
||||||
|
attrs.flags =
|
||||||
|
FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
|
||||||
|
attrs.format = PixelFormat.OPAQUE;
|
||||||
|
return win;
|
||||||
|
}
|
||||||
|
|
||||||
private WindowState createDimmingDialogWindow(boolean canBeImTarget) {
|
private WindowState createDimmingDialogWindow(boolean canBeImTarget) {
|
||||||
final WindowState win = spy(createWindow(null, TYPE_APPLICATION, "dimmingDialog"));
|
final WindowState win = spy(createWindow(null, TYPE_APPLICATION, "dimmingDialog"));
|
||||||
final WindowManager.LayoutParams attrs = win.mAttrs;
|
final WindowManager.LayoutParams attrs = win.mAttrs;
|
||||||
@@ -381,4 +394,27 @@ public class DisplayPolicyTests extends WindowTestsBase {
|
|||||||
displayPolicy.requestTransientBars(windowState, true);
|
displayPolicy.requestTransientBars(windowState, true);
|
||||||
verify(controlTarget).showInsets(anyInt(), anyBoolean());
|
verify(controlTarget).showInsets(anyInt(), anyBoolean());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@UseTestDisplay(addWindows = { W_NAVIGATION_BAR })
|
||||||
|
@Test
|
||||||
|
public void testTransientBarsSuppressedOnDreams() {
|
||||||
|
final WindowState win = createDreamWindow();
|
||||||
|
|
||||||
|
((TestWindowManagerPolicy) mWm.mPolicy).mIsUserSetupComplete = true;
|
||||||
|
win.mAttrs.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
||||||
|
final InsetsVisibilities insetsVisibilities = new InsetsVisibilities();
|
||||||
|
insetsVisibilities.setVisibility(ITYPE_NAVIGATION_BAR, false);
|
||||||
|
insetsVisibilities.setVisibility(ITYPE_EXTRA_NAVIGATION_BAR, false);
|
||||||
|
win.setRequestedVisibilities(insetsVisibilities);
|
||||||
|
|
||||||
|
final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy();
|
||||||
|
displayPolicy.addWindowLw(mNavBarWindow, mNavBarWindow.mAttrs);
|
||||||
|
final InsetsSourceProvider navBarProvider = mNavBarWindow.getControllableInsetProvider();
|
||||||
|
navBarProvider.updateControlForTarget(win, false);
|
||||||
|
navBarProvider.getSource().setVisible(false);
|
||||||
|
|
||||||
|
displayPolicy.setCanSystemBarsBeShownByUser(true);
|
||||||
|
displayPolicy.requestTransientBars(mNavBarWindow, true);
|
||||||
|
assertFalse(mDisplayContent.getInsetsPolicy().isTransient(ITYPE_NAVIGATION_BAR));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package com.android.server.wm;
|
package com.android.server.wm;
|
||||||
|
|
||||||
import static android.app.AppOpsManager.OP_NONE;
|
import static android.app.AppOpsManager.OP_NONE;
|
||||||
|
import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
|
||||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
|
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
|
||||||
import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
|
import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
|
||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
||||||
@@ -443,6 +444,12 @@ class WindowTestsBase extends SystemServiceTestsBase {
|
|||||||
return createWindow(null, type, activity, name);
|
return createWindow(null, type, activity, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WindowState createDreamWindow(WindowState parent, int type, String name) {
|
||||||
|
final WindowToken token = createWindowToken(
|
||||||
|
mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_DREAM, type);
|
||||||
|
return createWindow(parent, type, token, name);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Move these calls to a builder?
|
// TODO: Move these calls to a builder?
|
||||||
WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name,
|
WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name,
|
||||||
IWindow iwindow) {
|
IWindow iwindow) {
|
||||||
|
|||||||
Reference in New Issue
Block a user