Merge "DisplayCutout: Fix corner cutout issues in SystemUI" into pi-dev

am: be6007f0e0

Change-Id: I06dc817e07a8a6c2487fbaf59646d9016bd21b0d
This commit is contained in:
Adrian Roos
2018-03-16 14:49:36 +00:00
committed by android-build-merger
3 changed files with 66 additions and 8 deletions

View File

@@ -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;
@@ -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;
@@ -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

View File

@@ -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;
@@ -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;
@@ -213,6 +213,7 @@ public class KeyguardStatusBarView extends RelativeLayout
@Override
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
mLayoutState = LAYOUT_NONE;
if (updateLayoutConsideringCutout()) {
requestLayout();
}
@@ -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;

View File

@@ -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;
@@ -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;
@@ -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;
}
@@ -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.
@@ -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;
}
}