diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ClockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ClockController.java index f3583a4708277c389135680ae28cfcbf9d03e6d8..ba5cb7a44cff6c4b90e578d29f3498f5dd6c7a7e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ClockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ClockController.java @@ -18,17 +18,27 @@ package com.android.systemui.statusbar.phone; import android.util.Log; import android.view.View; - import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.policy.Clock; + import com.android.systemui.tuner.TunerService; +import android.util.DisplayMetrics; + +import android.util.Pair; +import android.view.View; +import android.view.WindowInsets; +import android.view.DisplayCutout; +import android.graphics.Rect; +import java.util.List; +import com.android.systemui.util.leak.RotationUtils; public class ClockController implements TunerService.Tunable { private static final String TAG = "ClockController"; + private int mCutoutLocation = -1; private static final int CLOCK_POSITION_RIGHT = 0; private static final int CLOCK_POSITION_CENTER = 1; private static final int CLOCK_POSITION_LEFT = 2; @@ -37,33 +47,77 @@ public class ClockController implements TunerService.Tunable { private Clock mActiveClock, mCenterClock, mLeftClock, mRightClock; - private int mClockPosition = CLOCK_POSITION_LEFT; + private int mClockPosition = CLOCK_POSITION_CENTER; private boolean mBlackListed = false; + private DisplayCutout mDisplayCutout; + private View mStatusBar; public ClockController(View statusBar) { + mCenterClock = statusBar.findViewById(R.id.clock_center); mLeftClock = statusBar.findViewById(R.id.clock); mRightClock = statusBar.findViewById(R.id.clock_right); - + mStatusBar = statusBar; mActiveClock = mLeftClock; - + statusBar.setOnApplyWindowInsetsListener(new android.view.View.OnApplyWindowInsetsListener(){ + public WindowInsets onApplyWindowInsets (View v, WindowInsets insets){ + updateActiveClock(); + return insets; + } + }); Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST, CLOCK_POSITION); + } public Clock getClock() { switch (mClockPosition) { case CLOCK_POSITION_RIGHT: return mRightClock; - case CLOCK_POSITION_CENTER: - return mCenterClock; case CLOCK_POSITION_LEFT: - default: return mLeftClock; + case CLOCK_POSITION_CENTER: + default: + if(mCutoutLocation == 1) + return mRightClock; + return mCenterClock; } } private void updateActiveClock() { + + if(mStatusBar instanceof PhoneStatusBarView) + mDisplayCutout = ((PhoneStatusBarView)mStatusBar).getRootWindowInsets().getDisplayCutout(); + else { + mDisplayCutout = ((StatusBarWindowView)mStatusBar).getRootWindowInsets().getDisplayCutout(); + } + DisplayMetrics metrics = new DisplayMetrics(); + mStatusBar.getDisplay().getMetrics(metrics); + int middle = metrics.widthPixels/2; + Pair margins = null; + if (mDisplayCutout != null) { + List bounding = mDisplayCutout.getBoundingRects(); + for (int i=0; i0 && right >0){ + margins = new Pair(left, right); + break; + } + } + } + if(margins == null) + mCutoutLocation = -1; + else if(margins.first < middle && margins.second > middle) + mCutoutLocation = 1; + else if(margins.first < middle) + mCutoutLocation = 0; + else + mCutoutLocation = 2; + + mActiveClock.setClockVisibleByUser(false); mActiveClock = getClock(); mActiveClock.setClockVisibleByUser(true);