Do not let snapshot window control the bar
But allow splash screen window to control the bar. Unlike snapshot starting window, all system bar corresponding attributes are read from app theme, so ideally the initial value should equals to the first activity main window. Even if the activity set another theme, it should only produce an one-time transition. (Ref: I3d7ba6b7d78c0508ddeccbf1d3408d723bd8e2c0) Bug: 261247891 Test: atest WindowStateTests Change-Id: I957e1eddcfa3f7b873f7a9b32eeaf69db5927b00
This commit is contained in:
committed by
Wei Sheng Shih
parent
864e20b981
commit
478bb4ddb4
@@ -2135,15 +2135,10 @@ public class DisplayPolicy {
|
||||
}
|
||||
|
||||
void updateSystemBarAttributes() {
|
||||
WindowState winCandidate = mFocusedWindow;
|
||||
if (winCandidate == null && mTopFullscreenOpaqueWindowState != null
|
||||
&& (mTopFullscreenOpaqueWindowState.mAttrs.flags
|
||||
& WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) == 0) {
|
||||
// Only focusable window can take system bar control.
|
||||
winCandidate = mTopFullscreenOpaqueWindowState;
|
||||
}
|
||||
// If there is no window focused, there will be nobody to handle the events
|
||||
// anyway, so just hang on in whatever state we're in until things settle down.
|
||||
WindowState winCandidate = mFocusedWindow != null ? mFocusedWindow
|
||||
: mTopFullscreenOpaqueWindowState;
|
||||
if (winCandidate == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2090,7 +2090,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
} else {
|
||||
final Task task = getTask();
|
||||
final boolean canFromTask = task != null && task.canAffectSystemUiFlags();
|
||||
return canFromTask && mActivityRecord.isVisible();
|
||||
return canFromTask && mActivityRecord.isVisible()
|
||||
// Do not let snapshot window control the bar
|
||||
&& (mAttrs.type != TYPE_APPLICATION_STARTING
|
||||
|| !(mStartingData instanceof SnapshotStartingData));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -412,6 +412,16 @@ public class WindowStateTests extends WindowTestsBase {
|
||||
assertFalse(app.canAffectSystemUiFlags());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCanAffectSystemUiFlags_starting() {
|
||||
final WindowState app = createWindow(null, TYPE_APPLICATION_STARTING, "app");
|
||||
app.mActivityRecord.setVisible(true);
|
||||
app.mStartingData = new SnapshotStartingData(mWm, null, 0);
|
||||
assertFalse(app.canAffectSystemUiFlags());
|
||||
app.mStartingData = new SplashScreenStartingData(mWm, 0, 0);
|
||||
assertTrue(app.canAffectSystemUiFlags());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCanAffectSystemUiFlags_disallow() {
|
||||
final WindowState app = createWindow(null, TYPE_APPLICATION, "app");
|
||||
|
||||
Reference in New Issue
Block a user