Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 004e24b9 authored by narinder Rana's avatar narinder Rana
Browse files

find device notch and update clock location

parent ff6b4fd5
Loading
Loading
Loading
Loading
+55 −6
Original line number Diff line number Diff line
@@ -25,10 +25,19 @@ 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;
@@ -38,8 +47,10 @@ public class ClockController implements TunerService.Tunable {
    private Clock mActiveClock, mCenterClock, mLeftClock, mRightClock;
    private View mCenterClockLayout, mRightClockLayout;

    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);
@@ -50,7 +61,12 @@ public class ClockController implements TunerService.Tunable {
        mRightClockLayout = statusBar.findViewById(R.id.right_clock_layout);

        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);
    }
@@ -59,15 +75,48 @@ public class ClockController implements TunerService.Tunable {
        switch (mClockPosition) {
            case CLOCK_POSITION_RIGHT:
                return mRightClock;
            case CLOCK_POSITION_CENTER:
                return mCenterClock;
            case CLOCK_POSITION_LEFT:
                return CLOCK_POSITION_LEFT;
            case CLOCK_POSITION_CENTER:
            default:
                return mLeftClock;
                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<Integer, Integer> margins = null;
        if (mDisplayCutout != null) {
            List<Rect> bounding = mDisplayCutout.getBoundingRects();
            for (int i=0; i<bounding.size(); i++) {
                int left = bounding.get(i).left;
                int right = bounding.get(i).right;
                int top = bounding.get(i).top;
                int bottom = bounding.get(i).bottom;
                if(left >0 && right >0){
                    margins = new Pair<Integer, Integer>(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);