Loading services/core/java/com/android/server/wm/DisplayPolicy.java +20 −0 Original line number Diff line number Diff line Loading @@ -967,6 +967,26 @@ public class DisplayPolicy { break; } if (LayoutParams.isSystemAlertWindowType(attrs.type)) { float maxOpacity = mService.mMaximumObscuringOpacityForTouch; if (attrs.alpha > maxOpacity && (attrs.flags & FLAG_NOT_TOUCHABLE) != 0 && (attrs.privateFlags & PRIVATE_FLAG_TRUSTED_OVERLAY) == 0) { // The app is posting a SAW with the intent of letting touches pass through, but // they are going to be deemed untrusted and will be blocked. Try to honor the // intent of letting touches pass through at the cost of 0.2 opacity for app // compatibility reasons. More details on b/218777508. Slog.w(TAG, String.format( "App %s has a system alert window (type = %d) with FLAG_NOT_TOUCHABLE and " + "LayoutParams.alpha = %.2f > %.2f, setting alpha to %.2f to " + "let touches pass through (if this is isn't desirable, remove " + "flag FLAG_NOT_TOUCHABLE).", attrs.packageName, attrs.type, attrs.alpha, maxOpacity, maxOpacity)); attrs.alpha = maxOpacity; win.mWinAnimator.mAlpha = maxOpacity; } } // Check if alternate bars positions were updated. if (mStatusBarAlt == win) { mStatusBarAltPosition = getAltBarPosition(attrs); Loading services/core/java/com/android/server/wm/WindowManagerService.java +20 −0 Original line number Diff line number Diff line Loading @@ -769,6 +769,9 @@ public class WindowManagerService extends IWindowManager.Stub private final DisplayHashController mDisplayHashController; volatile float mMaximumObscuringOpacityForTouch = InputManager.DEFAULT_MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH; @VisibleForTesting final WindowContextListenerController mWindowContextListenerController = new WindowContextListenerController(); Loading Loading @@ -801,6 +804,8 @@ public class WindowManagerService extends IWindowManager.Stub DEVELOPMENT_RENDER_SHADOWS_IN_COMPOSITOR); private final Uri mDisplaySettingsPathUri = Settings.Global.getUriFor( DEVELOPMENT_WM_DISPLAY_SETTINGS_PATH); private final Uri mMaximumObscuringOpacityForTouchUri = Settings.Global.getUriFor( Settings.Global.MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH); public SettingsObserver() { super(new Handler()); Loading @@ -827,6 +832,8 @@ public class WindowManagerService extends IWindowManager.Stub UserHandle.USER_ALL); resolver.registerContentObserver(mDisplaySettingsPathUri, false, this, UserHandle.USER_ALL); resolver.registerContentObserver(mMaximumObscuringOpacityForTouchUri, false, this, UserHandle.USER_ALL); } @Override Loading Loading @@ -875,6 +882,11 @@ public class WindowManagerService extends IWindowManager.Stub return; } if (mMaximumObscuringOpacityForTouchUri.equals(uri)) { updateMaximumObscuringOpacityForTouch(); return; } @UpdateAnimationScaleMode final int mode; if (mWindowAnimationScaleUri.equals(uri)) { Loading @@ -894,6 +906,14 @@ public class WindowManagerService extends IWindowManager.Stub void loadSettings() { updateSystemUiSettings(false /* handleChange */); updatePointerLocation(); updateMaximumObscuringOpacityForTouch(); } void updateMaximumObscuringOpacityForTouch() { ContentResolver resolver = mContext.getContentResolver(); mMaximumObscuringOpacityForTouch = Settings.Global.getFloat(resolver, Settings.Global.MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH, InputManager.DEFAULT_MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH); } void updateSystemUiSettings(boolean handleChange) { Loading Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +20 −0 Original line number Diff line number Diff line Loading @@ -967,6 +967,26 @@ public class DisplayPolicy { break; } if (LayoutParams.isSystemAlertWindowType(attrs.type)) { float maxOpacity = mService.mMaximumObscuringOpacityForTouch; if (attrs.alpha > maxOpacity && (attrs.flags & FLAG_NOT_TOUCHABLE) != 0 && (attrs.privateFlags & PRIVATE_FLAG_TRUSTED_OVERLAY) == 0) { // The app is posting a SAW with the intent of letting touches pass through, but // they are going to be deemed untrusted and will be blocked. Try to honor the // intent of letting touches pass through at the cost of 0.2 opacity for app // compatibility reasons. More details on b/218777508. Slog.w(TAG, String.format( "App %s has a system alert window (type = %d) with FLAG_NOT_TOUCHABLE and " + "LayoutParams.alpha = %.2f > %.2f, setting alpha to %.2f to " + "let touches pass through (if this is isn't desirable, remove " + "flag FLAG_NOT_TOUCHABLE).", attrs.packageName, attrs.type, attrs.alpha, maxOpacity, maxOpacity)); attrs.alpha = maxOpacity; win.mWinAnimator.mAlpha = maxOpacity; } } // Check if alternate bars positions were updated. if (mStatusBarAlt == win) { mStatusBarAltPosition = getAltBarPosition(attrs); Loading
services/core/java/com/android/server/wm/WindowManagerService.java +20 −0 Original line number Diff line number Diff line Loading @@ -769,6 +769,9 @@ public class WindowManagerService extends IWindowManager.Stub private final DisplayHashController mDisplayHashController; volatile float mMaximumObscuringOpacityForTouch = InputManager.DEFAULT_MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH; @VisibleForTesting final WindowContextListenerController mWindowContextListenerController = new WindowContextListenerController(); Loading Loading @@ -801,6 +804,8 @@ public class WindowManagerService extends IWindowManager.Stub DEVELOPMENT_RENDER_SHADOWS_IN_COMPOSITOR); private final Uri mDisplaySettingsPathUri = Settings.Global.getUriFor( DEVELOPMENT_WM_DISPLAY_SETTINGS_PATH); private final Uri mMaximumObscuringOpacityForTouchUri = Settings.Global.getUriFor( Settings.Global.MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH); public SettingsObserver() { super(new Handler()); Loading @@ -827,6 +832,8 @@ public class WindowManagerService extends IWindowManager.Stub UserHandle.USER_ALL); resolver.registerContentObserver(mDisplaySettingsPathUri, false, this, UserHandle.USER_ALL); resolver.registerContentObserver(mMaximumObscuringOpacityForTouchUri, false, this, UserHandle.USER_ALL); } @Override Loading Loading @@ -875,6 +882,11 @@ public class WindowManagerService extends IWindowManager.Stub return; } if (mMaximumObscuringOpacityForTouchUri.equals(uri)) { updateMaximumObscuringOpacityForTouch(); return; } @UpdateAnimationScaleMode final int mode; if (mWindowAnimationScaleUri.equals(uri)) { Loading @@ -894,6 +906,14 @@ public class WindowManagerService extends IWindowManager.Stub void loadSettings() { updateSystemUiSettings(false /* handleChange */); updatePointerLocation(); updateMaximumObscuringOpacityForTouch(); } void updateMaximumObscuringOpacityForTouch() { ContentResolver resolver = mContext.getContentResolver(); mMaximumObscuringOpacityForTouch = Settings.Global.getFloat(resolver, Settings.Global.MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH, InputManager.DEFAULT_MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH); } void updateSystemUiSettings(boolean handleChange) { Loading