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

Commit 36672e70 authored by ihtfp69's avatar ihtfp69 Committed by Clark Scheff
Browse files

SystemUI: allow for the clock to be centered (1 of 2)

This allows the clock to be centered and does
not break the normal functionality of the status bar.
Overflow for status bar icons is adjusted accordingly
when the clock is centered. The clock slides in/out
when centered and the ticker is running.

Change-Id: I8bb99af278d316d7632cd07ff5c4722c5a27cb12
parent 6623a410
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -3070,10 +3070,11 @@ public final class Settings {
                "status_bar_battery_show_percent";

        /**
         * Whether to show the clock in status bar
         * of the stock battery icon
         * Whether to hide the clock, show it in the default
         * position or show it in the center
         * 0: don't show the clock
         * 1: show the clock
         * 1: show the clock in the default position
         * 2: show the clock in the center
         * default: 1
         * @hide
         */
+12 −2
Original line number Diff line number Diff line
@@ -131,6 +131,16 @@
        </LinearLayout>
    </LinearLayout>

    <com.android.systemui.statusbar.policy.Clock
        android:id="@+id/center_clock"
        android:textAppearance="@style/TextAppearance.StatusBar.Clock"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:singleLine="true"
        />

    <LinearLayout android:id="@+id/ticker"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
+15 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ public class IconMerger extends LinearLayout {

    private int mIconSize;
    private View mMoreView;
    private boolean mCenteredClock = false;

    public IconMerger(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -50,6 +51,10 @@ public class IconMerger extends LinearLayout {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        // we need to constrain this to an integral multiple of our children
        int width = getMeasuredWidth();
        if (mCenteredClock) {
            int totalWidth = mContext.getResources().getDisplayMetrics().widthPixels;
            width = totalWidth / 2 - mIconSize * 2;
        }
        setMeasuredDimension(width - (width % mIconSize), getMeasuredHeight());
    }

@@ -69,7 +74,12 @@ public class IconMerger extends LinearLayout {
        }
        final boolean overflowShown = (mMoreView.getVisibility() == View.VISIBLE);
        // let's assume we have one more slot if the more icon is already showing
        if (overflowShown) visibleChildren --;
        if (overflowShown) {
            int totalWidth = mContext.getResources().getDisplayMetrics().widthPixels;
            if (!mCenteredClock || (visibleChildren > (totalWidth / mIconSize / 2 + 1))) {
                visibleChildren--;
            }
        }
        final boolean moreRequired = visibleChildren * mIconSize > width;
        if (moreRequired != overflowShown) {
            post(new Runnable() {
@@ -80,4 +90,8 @@ public class IconMerger extends LinearLayout {
            });
        }
    }

    public void setCenteredClock(boolean centered) {
        mCenteredClock = centered;
    }
}
+62 −12
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@ import com.android.systemui.statusbar.SignalClusterView;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BluetoothController;
import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.statusbar.policy.DateView;
import com.android.systemui.statusbar.policy.DockBatteryController;
import com.android.systemui.statusbar.policy.HeadsUpNotificationView;
@@ -167,6 +168,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    private static final int BRIGHTNESS_CONTROL_LONG_PRESS_TIMEOUT = 750; // ms
    private static final int BRIGHTNESS_CONTROL_LINGER_THRESHOLD = 20;

    private static final int CLOCK_STYLE_HIDDEN = 0;
    private static final int CLOCK_STYLE_DEFAULT = 1;
    private static final int CLOCK_STYLE_CENTERED = 2;

    // fling gesture tuning parameters, scaled to display density
    private float mSelfExpandVelocityPx; // classic value: 2000px/s
    private float mSelfCollapseVelocityPx; // classic value: 2000px/s (will be negated to collapse "up")
@@ -272,7 +277,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,

    // clock
    private boolean mShowClock = true;
    private boolean mClockEnabled;
    private int mClockStyle;
    private Clock mClockView;

    // position
    int[] mPositionTmp = new int[2];
@@ -392,13 +398,18 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            resolver.registerContentObserver(Settings.System.getUriFor(
                    Settings.System.NAVBAR_LEFT_IN_LANDSCAPE), false, this);
            updateSettings();
            updateClockLocation();
        }

        @Override
        public void onChange(boolean selfChange) {
        public void onChange(boolean selfChange, Uri uri) {
            if (uri.equals(Settings.System.getUriFor(Settings.System.STATUS_BAR_CLOCK))) {
                updateClockLocation();
            } else {
                updateSettings();
            }
        }
    }

    class DevForceNavbarObserver extends ContentObserver {
        DevForceNavbarObserver(Handler handler) {
@@ -1612,11 +1623,35 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    }

    private void updateClockVisibility() {
        if (mStatusBarView == null) return;
        View clock = mStatusBarView.findViewById(R.id.clock);
        if (clock != null) {
            clock.setVisibility(mClockEnabled && mShowClock ? View.VISIBLE : View.GONE);
        if (mClockView != null) {
            int visibility = mClockStyle != CLOCK_STYLE_HIDDEN
                    && mShowClock ? View.VISIBLE : View.GONE;
            if (mClockStyle == CLOCK_STYLE_CENTERED && mTicking) {
                visibility = View.INVISIBLE;
            }
            mClockView.setVisibility(visibility);
        }
    }

    private void updateClockLocation() {
        mClockStyle = Settings.System.getIntForUser(mContext.getContentResolver(),
                Settings.System.STATUS_BAR_CLOCK, CLOCK_STYLE_DEFAULT, mCurrentUserId);

        mNotificationIcons.setCenteredClock(mClockStyle == CLOCK_STYLE_CENTERED);
        updateNotificationIcons();

        switch (mClockStyle) {
            case CLOCK_STYLE_DEFAULT:
                mClockView = (Clock) mStatusBarView.findViewById(R.id.clock);
                mStatusBarView.findViewById(R.id.center_clock).setVisibility(View.GONE);
                break;
            case CLOCK_STYLE_CENTERED:
                mClockView = (Clock) mStatusBarView.findViewById(R.id.center_clock);
                mStatusBarView.findViewById(R.id.clock).setVisibility(View.GONE);
                break;
        }

        updateClockVisibility();
    }

    /**
@@ -2712,6 +2747,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        public void tickerStarting() {
            mTicking = true;
            mStatusBarContents.setVisibility(View.GONE);
            if (mClockStyle == CLOCK_STYLE_CENTERED && mShowClock) {
                mClockView.setVisibility(View.INVISIBLE);
                mClockView.startAnimation(
                        loadAnim(com.android.internal.R.anim.push_up_out, null));
            }
            mTickerView.setVisibility(View.VISIBLE);
            mTickerView.startAnimation(loadAnim(com.android.internal.R.anim.push_up_in, null));
            mStatusBarContents.startAnimation(loadAnim(com.android.internal.R.anim.push_up_out, null));
@@ -2721,6 +2761,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        public void tickerDone() {
            mStatusBarContents.setVisibility(View.VISIBLE);
            mTickerView.setVisibility(View.GONE);
            if (mClockStyle == CLOCK_STYLE_CENTERED && mShowClock) {
                mClockView.setVisibility(View.VISIBLE);
                mClockView.startAnimation(
                        loadAnim(com.android.internal.R.anim.push_down_in, null));
            }
            mStatusBarContents.startAnimation(loadAnim(com.android.internal.R.anim.push_down_in, null));
            mTickerView.startAnimation(loadAnim(com.android.internal.R.anim.push_down_out,
                        mTickingDoneListener));
@@ -2732,7 +2777,13 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
                mStatusBarContents
                        .startAnimation(loadAnim(com.android.internal.R.anim.fade_in, null));
            }
            if (mClockStyle == CLOCK_STYLE_CENTERED && mShowClock) {
                mClockView.setVisibility(View.VISIBLE);
                mClockView.startAnimation(
                        loadAnim(com.android.internal.R.anim.fade_in, null));
            }
            mTickerView.setVisibility(View.GONE);

            // we do not animate the ticker away at this point, just get rid of it (b/6992707)
        }
    }
@@ -3196,10 +3247,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            mNavigationBarView.setLeftInLandscape(navLeftInLandscape);
        }

        mClockEnabled = Settings.System.getIntForUser(resolver,
                Settings.System.STATUS_BAR_CLOCK, 1, mCurrentUserId) != 0;
        updateClockVisibility();

        int signalStyle = Settings.System.getIntForUser(resolver,
                Settings.System.STATUS_BAR_SIGNAL_TEXT,
                SignalClusterView.STYLE_NORMAL, mCurrentUserId);
@@ -3310,6 +3357,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            addIcon(slot, i, i, icon);
        }

        // update the clock location
        updateClockLocation();

        // recreate notifications.
        for (int i = 0; i < nNotifs; i++) {
            Pair<IBinder, StatusBarNotification> notifData = notifications.get(i);
@@ -3546,7 +3596,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        }
        boolean modeChange = command.equals(COMMAND_ENTER) || command.equals(COMMAND_EXIT);
        if (modeChange || command.equals(COMMAND_CLOCK)) {
            dispatchDemoCommandToView(command, args, R.id.clock);
            mClockView.dispatchDemoCommand(command, args);
        }
        if (modeChange || command.equals(COMMAND_BATTERY)) {
            dispatchDemoCommandToView(command, args, R.id.battery);
+5 −2
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ public final class PhoneStatusBarTransitions extends BarTransitions {
    private final PhoneStatusBarView mView;
    private final float mIconAlphaWhenOpaque;

    private View mLeftSide, mStatusIcons, mSignalCluster, mClock;
    private View mLeftSide, mStatusIcons, mSignalCluster, mClock, mCenterClock;
    private View mBattery, mDockBattery;
    private Animator mCurrentAnimation;

@@ -55,6 +55,7 @@ public final class PhoneStatusBarTransitions extends BarTransitions {
        mBattery = mView.findViewById(R.id.battery);
        mDockBattery = mView.findViewById(R.id.dock_battery);
        mClock = mView.findViewById(R.id.clock);
        mCenterClock = mView.findViewById(R.id.center_clock);
        applyModeBackground(-1, getMode(), false /*animate*/);
        applyMode(getMode(), false /*animate*/);
    }
@@ -99,7 +100,8 @@ public final class PhoneStatusBarTransitions extends BarTransitions {
                    animateTransitionTo(mSignalCluster, newAlpha),
                    animateTransitionTo(mDockBattery, newAlphaBC),
                    animateTransitionTo(mBattery, newAlphaBC),
                    animateTransitionTo(mClock, newAlphaBC)
                    animateTransitionTo(mClock, newAlphaBC),
                    animateTransitionTo(mCenterClock, newAlphaBC)
                    );
            if (mode == MODE_LIGHTS_OUT) {
                anims.setDuration(LIGHTS_OUT_DURATION);
@@ -113,6 +115,7 @@ public final class PhoneStatusBarTransitions extends BarTransitions {
            mDockBattery.setAlpha(newAlphaBC);
            mBattery.setAlpha(newAlphaBC);
            mClock.setAlpha(newAlphaBC);
            mCenterClock.setAlpha(newAlphaBC);
        }
    }
}
Loading