Loading packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +16 −0 Original line number Diff line number Diff line Loading @@ -33,7 +33,9 @@ import android.text.TextUtils; import android.text.format.DateUtils; import android.util.AttributeSet; import android.util.Log; import android.util.Pair; import android.view.View; import android.view.WindowInsets; import android.widget.RelativeLayout; import android.widget.TextView; Loading @@ -47,6 +49,7 @@ import com.android.systemui.SysUiServiceProvider; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.qs.QSDetail.Callback; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager; import com.android.systemui.statusbar.policy.DarkIconDispatcher; Loading Loading @@ -260,6 +263,19 @@ public class QuickStatusBarHeader extends RelativeLayout implements CommandQueue public void onAttachedToWindow() { SysUiServiceProvider.getComponent(getContext(), CommandQueue.class).addCallbacks(this); Dependency.get(StatusBarIconController.class).addIconGroup(mIconManager); requestApplyInsets(); } @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { Pair<Integer, Integer> padding = PhoneStatusBarView.cornerCutoutMargins( insets.getDisplayCutout(), getDisplay()); if (padding == null) { setPadding(0, 0, 0, 0); } else { setPadding(padding.first, 0, padding.second, 0); } return super.onApplyWindowInsets(insets); } @Override Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +14 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Pair; import android.util.TypedValue; import android.view.DisplayCutout; import android.view.Gravity; Loading @@ -43,7 +44,6 @@ import com.android.systemui.BatteryMeterView; import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.ScreenDecorations; import com.android.systemui.qs.QSPanel; import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager; import com.android.systemui.statusbar.policy.BatteryController; Loading Loading @@ -213,6 +213,7 @@ public class KeyguardStatusBarView extends RelativeLayout @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { mLayoutState = LAYOUT_NONE; if (updateLayoutConsideringCutout()) { requestLayout(); } Loading @@ -221,13 +222,24 @@ public class KeyguardStatusBarView extends RelativeLayout private boolean updateLayoutConsideringCutout() { DisplayCutout dc = getRootWindowInsets().getDisplayCutout(); if (dc == null) { Pair<Integer, Integer> cornerCutoutMargins = PhoneStatusBarView.cornerCutoutMargins(dc, getDisplay()); updateCornerCutoutPadding(cornerCutoutMargins); if (dc == null || cornerCutoutMargins != null) { return updateLayoutParamsNoCutout(); } else { return updateLayoutParamsForCutout(dc); } } private void updateCornerCutoutPadding(Pair<Integer, Integer> cornerCutoutMargins) { if (cornerCutoutMargins != null) { setPadding(cornerCutoutMargins.first, 0, cornerCutoutMargins.second, 0); } else { setPadding(0, 0, 0, 0); } } private boolean updateLayoutParamsNoCutout() { if (mLayoutState == LAYOUT_NO_CUTOUT) { return false; Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +36 −6 Original line number Diff line number Diff line Loading @@ -23,9 +23,12 @@ import static com.android.systemui.ScreenDecorations.DisplayCutoutView.boundsFro import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; import android.graphics.Point; import android.graphics.Rect; import android.util.AttributeSet; import android.util.EventLog; import android.util.Pair; import android.view.Display; import android.view.DisplayCutout; import android.view.Gravity; import android.view.MotionEvent; Loading @@ -33,9 +36,9 @@ import android.view.View; import android.view.ViewGroup; import android.view.WindowInsets; import android.view.accessibility.AccessibilityEvent; import android.widget.FrameLayout; import android.widget.LinearLayout; import com.android.systemui.Dependency; import com.android.systemui.EventLogTags; import com.android.systemui.R; Loading Loading @@ -284,18 +287,20 @@ public class PhoneStatusBarView extends PanelBar { } private void updateLayoutForCutout() { updateCutoutLocation(); updateSafeInsets(); Pair<Integer, Integer> cornerCutoutMargins = cornerCutoutMargins(mDisplayCutout, getDisplay()); updateCutoutLocation(cornerCutoutMargins); updateSafeInsets(cornerCutoutMargins); } private void updateCutoutLocation() { private void updateCutoutLocation(Pair<Integer, Integer> cornerCutoutMargins) { // Not all layouts have a cutout (e.g., Car) if (mCutoutSpace == null) { return; } if (mDisplayCutout == null || mDisplayCutout.isEmpty() || mLastOrientation != ORIENTATION_PORTRAIT) { || mLastOrientation != ORIENTATION_PORTRAIT || cornerCutoutMargins != null) { mCutoutSpace.setVisibility(View.GONE); return; } Loading @@ -310,7 +315,7 @@ public class PhoneStatusBarView extends PanelBar { lp.height = bounds.height(); } private void updateSafeInsets() { private void updateSafeInsets(Pair<Integer, Integer> cornerCutoutMargins) { // Depending on our rotation, we may have to work around a cutout in the middle of the view, // or letterboxing from the right or left sides. Loading @@ -323,5 +328,30 @@ public class PhoneStatusBarView extends PanelBar { lp.leftMargin = mDisplayCutout.getSafeInsetLeft(); lp.rightMargin = mDisplayCutout.getSafeInsetRight(); if (cornerCutoutMargins != null) { lp.leftMargin = Math.max(lp.leftMargin, cornerCutoutMargins.first); lp.rightMargin = Math.max(lp.rightMargin, cornerCutoutMargins.second); } } public static Pair<Integer, Integer> cornerCutoutMargins(DisplayCutout cutout, Display display) { if (cutout == null) { return null; } Point size = new Point(); display.getRealSize(size); Rect bounds = new Rect(); boundsFromDirection(cutout, Gravity.TOP, bounds); if (bounds.left <= 0) { return new Pair<>(bounds.right, 0); } if (bounds.right >= size.x) { return new Pair<>(0, size.x - bounds.left); } return null; } } Loading
packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +16 −0 Original line number Diff line number Diff line Loading @@ -33,7 +33,9 @@ import android.text.TextUtils; import android.text.format.DateUtils; import android.util.AttributeSet; import android.util.Log; import android.util.Pair; import android.view.View; import android.view.WindowInsets; import android.widget.RelativeLayout; import android.widget.TextView; Loading @@ -47,6 +49,7 @@ import com.android.systemui.SysUiServiceProvider; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.qs.QSDetail.Callback; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager; import com.android.systemui.statusbar.policy.DarkIconDispatcher; Loading Loading @@ -260,6 +263,19 @@ public class QuickStatusBarHeader extends RelativeLayout implements CommandQueue public void onAttachedToWindow() { SysUiServiceProvider.getComponent(getContext(), CommandQueue.class).addCallbacks(this); Dependency.get(StatusBarIconController.class).addIconGroup(mIconManager); requestApplyInsets(); } @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { Pair<Integer, Integer> padding = PhoneStatusBarView.cornerCutoutMargins( insets.getDisplayCutout(), getDisplay()); if (padding == null) { setPadding(0, 0, 0, 0); } else { setPadding(padding.first, 0, padding.second, 0); } return super.onApplyWindowInsets(insets); } @Override Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +14 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Pair; import android.util.TypedValue; import android.view.DisplayCutout; import android.view.Gravity; Loading @@ -43,7 +44,6 @@ import com.android.systemui.BatteryMeterView; import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.ScreenDecorations; import com.android.systemui.qs.QSPanel; import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager; import com.android.systemui.statusbar.policy.BatteryController; Loading Loading @@ -213,6 +213,7 @@ public class KeyguardStatusBarView extends RelativeLayout @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { mLayoutState = LAYOUT_NONE; if (updateLayoutConsideringCutout()) { requestLayout(); } Loading @@ -221,13 +222,24 @@ public class KeyguardStatusBarView extends RelativeLayout private boolean updateLayoutConsideringCutout() { DisplayCutout dc = getRootWindowInsets().getDisplayCutout(); if (dc == null) { Pair<Integer, Integer> cornerCutoutMargins = PhoneStatusBarView.cornerCutoutMargins(dc, getDisplay()); updateCornerCutoutPadding(cornerCutoutMargins); if (dc == null || cornerCutoutMargins != null) { return updateLayoutParamsNoCutout(); } else { return updateLayoutParamsForCutout(dc); } } private void updateCornerCutoutPadding(Pair<Integer, Integer> cornerCutoutMargins) { if (cornerCutoutMargins != null) { setPadding(cornerCutoutMargins.first, 0, cornerCutoutMargins.second, 0); } else { setPadding(0, 0, 0, 0); } } private boolean updateLayoutParamsNoCutout() { if (mLayoutState == LAYOUT_NO_CUTOUT) { return false; Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +36 −6 Original line number Diff line number Diff line Loading @@ -23,9 +23,12 @@ import static com.android.systemui.ScreenDecorations.DisplayCutoutView.boundsFro import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; import android.graphics.Point; import android.graphics.Rect; import android.util.AttributeSet; import android.util.EventLog; import android.util.Pair; import android.view.Display; import android.view.DisplayCutout; import android.view.Gravity; import android.view.MotionEvent; Loading @@ -33,9 +36,9 @@ import android.view.View; import android.view.ViewGroup; import android.view.WindowInsets; import android.view.accessibility.AccessibilityEvent; import android.widget.FrameLayout; import android.widget.LinearLayout; import com.android.systemui.Dependency; import com.android.systemui.EventLogTags; import com.android.systemui.R; Loading Loading @@ -284,18 +287,20 @@ public class PhoneStatusBarView extends PanelBar { } private void updateLayoutForCutout() { updateCutoutLocation(); updateSafeInsets(); Pair<Integer, Integer> cornerCutoutMargins = cornerCutoutMargins(mDisplayCutout, getDisplay()); updateCutoutLocation(cornerCutoutMargins); updateSafeInsets(cornerCutoutMargins); } private void updateCutoutLocation() { private void updateCutoutLocation(Pair<Integer, Integer> cornerCutoutMargins) { // Not all layouts have a cutout (e.g., Car) if (mCutoutSpace == null) { return; } if (mDisplayCutout == null || mDisplayCutout.isEmpty() || mLastOrientation != ORIENTATION_PORTRAIT) { || mLastOrientation != ORIENTATION_PORTRAIT || cornerCutoutMargins != null) { mCutoutSpace.setVisibility(View.GONE); return; } Loading @@ -310,7 +315,7 @@ public class PhoneStatusBarView extends PanelBar { lp.height = bounds.height(); } private void updateSafeInsets() { private void updateSafeInsets(Pair<Integer, Integer> cornerCutoutMargins) { // Depending on our rotation, we may have to work around a cutout in the middle of the view, // or letterboxing from the right or left sides. Loading @@ -323,5 +328,30 @@ public class PhoneStatusBarView extends PanelBar { lp.leftMargin = mDisplayCutout.getSafeInsetLeft(); lp.rightMargin = mDisplayCutout.getSafeInsetRight(); if (cornerCutoutMargins != null) { lp.leftMargin = Math.max(lp.leftMargin, cornerCutoutMargins.first); lp.rightMargin = Math.max(lp.rightMargin, cornerCutoutMargins.second); } } public static Pair<Integer, Integer> cornerCutoutMargins(DisplayCutout cutout, Display display) { if (cutout == null) { return null; } Point size = new Point(); display.getRealSize(size); Rect bounds = new Rect(); boundsFromDirection(cutout, Gravity.TOP, bounds); if (bounds.left <= 0) { return new Pair<>(bounds.right, 0); } if (bounds.right >= size.x) { return new Pair<>(0, size.x - bounds.left); } return null; } }