Clear low profile mode while forcing client to show system bars
Forcing client to show system bars would clear system UI flags at the client side. SYSTEM_UI_FLAG_LOW_PROFILE would be cleared as well in previous Android versions. This CL makes the behavior compatible. Fix: 167892531 Test: Steps in the bug Change-Id: I466a05120a08ac95b619eadd8291fc546d3bb450
This commit is contained in:
@@ -1981,11 +1981,7 @@ public final class ViewRootImpl implements ViewParent,
|
||||
mCompatibleVisibilityInfo.globalVisibility =
|
||||
(mCompatibleVisibilityInfo.globalVisibility & ~View.SYSTEM_UI_FLAG_LOW_PROFILE)
|
||||
| (mAttachInfo.mSystemUiVisibility & View.SYSTEM_UI_FLAG_LOW_PROFILE);
|
||||
if (mDispatchedSystemUiVisibility != mCompatibleVisibilityInfo.globalVisibility) {
|
||||
mHandler.removeMessages(MSG_DISPATCH_SYSTEM_UI_VISIBILITY);
|
||||
mHandler.sendMessage(mHandler.obtainMessage(
|
||||
MSG_DISPATCH_SYSTEM_UI_VISIBILITY, mCompatibleVisibilityInfo));
|
||||
}
|
||||
dispatchDispatchSystemUiVisibilityChanged(mCompatibleVisibilityInfo);
|
||||
if (mAttachInfo.mKeepScreenOn != oldScreenOn
|
||||
|| mAttachInfo.mSystemUiVisibility != params.subtreeSystemUiVisibility
|
||||
|| mAttachInfo.mHasSystemUiListeners != params.hasSystemUiListeners) {
|
||||
@@ -2039,9 +2035,30 @@ public final class ViewRootImpl implements ViewParent,
|
||||
info.globalVisibility |= systemUiFlag;
|
||||
info.localChanges &= ~systemUiFlag;
|
||||
}
|
||||
if (mDispatchedSystemUiVisibility != info.globalVisibility) {
|
||||
dispatchDispatchSystemUiVisibilityChanged(info);
|
||||
}
|
||||
|
||||
/**
|
||||
* If the system is forcing showing any system bar, the legacy low profile flag should be
|
||||
* cleared for compatibility.
|
||||
*
|
||||
* @param showTypes {@link InsetsType types} shown by the system.
|
||||
* @param fromIme {@code true} if the invocation is from IME.
|
||||
*/
|
||||
private void clearLowProfileModeIfNeeded(@InsetsType int showTypes, boolean fromIme) {
|
||||
final SystemUiVisibilityInfo info = mCompatibleVisibilityInfo;
|
||||
if ((showTypes & Type.systemBars()) != 0 && !fromIme
|
||||
&& (info.globalVisibility & SYSTEM_UI_FLAG_LOW_PROFILE) != 0) {
|
||||
info.globalVisibility &= ~SYSTEM_UI_FLAG_LOW_PROFILE;
|
||||
info.localChanges |= SYSTEM_UI_FLAG_LOW_PROFILE;
|
||||
dispatchDispatchSystemUiVisibilityChanged(info);
|
||||
}
|
||||
}
|
||||
|
||||
private void dispatchDispatchSystemUiVisibilityChanged(SystemUiVisibilityInfo args) {
|
||||
if (mDispatchedSystemUiVisibility != args.globalVisibility) {
|
||||
mHandler.removeMessages(MSG_DISPATCH_SYSTEM_UI_VISIBILITY);
|
||||
mHandler.sendMessage(mHandler.obtainMessage(MSG_DISPATCH_SYSTEM_UI_VISIBILITY, info));
|
||||
mHandler.sendMessage(mHandler.obtainMessage(MSG_DISPATCH_SYSTEM_UI_VISIBILITY, args));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5008,6 +5025,7 @@ public final class ViewRootImpl implements ViewParent,
|
||||
String.format("Calling showInsets(%d,%b) on window that no longer"
|
||||
+ " has views.", msg.arg1, msg.arg2 == 1));
|
||||
}
|
||||
clearLowProfileModeIfNeeded(msg.arg1, msg.arg2 == 1);
|
||||
mInsetsController.show(msg.arg1, msg.arg2 == 1);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user