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

Commit 7af5d09d authored by Danesh M's avatar Danesh M Committed by Gerrit Code Review
Browse files

SystemUI : Clock position support + am/pm styles

Based on Dave Kessler's work from cm-12.0

Change-Id: I88e630fcfcffd8a795f1abbeecd71a258d0e8e81
parent af0be986
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -62,6 +62,16 @@
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                >
                <com.android.systemui.statusbar.policy.Clock
                    android:id="@+id/left_clock"
                    android:textAppearance="@style/TextAppearance.StatusBar.Clock"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:singleLine="true"
                    android:paddingEnd="6dip"
                    android:gravity="center"
                    android:visibility="gone"
                    />
                <com.android.systemui.statusbar.StatusBarIconView android:id="@+id/moreIcon"
                    android:layout_width="@dimen/status_bar_icon_size"
                    android:layout_height="match_parent"
@@ -97,4 +107,21 @@
        </com.android.keyguard.AlphaOptimizedLinearLayout>
    </LinearLayout>

    <com.android.keyguard.AlphaOptimizedLinearLayout
        android:gravity="center"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <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:singleLine="true"
            android:gravity="center"
            android:visibility="gone"
            />
    </com.android.keyguard.AlphaOptimizedLinearLayout>
</com.android.systemui.statusbar.phone.PhoneStatusBarView>
+137 −0
Original line number Diff line number Diff line
package com.android.systemui.statusbar.phone;

import com.android.systemui.FontSizeUtils;

import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.graphics.Color;
import android.os.Handler;
import android.view.View;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.Clock;

import cyanogenmod.providers.CMSettings;

/**
 * To control your...clock
 */
public class ClockController {

    public static final int STYLE_HIDE_CLOCK    = 0;
    public static final int STYLE_CLOCK_RIGHT   = 1;
    public static final int STYLE_CLOCK_CENTER  = 2;
    public static final int STYLE_CLOCK_LEFT    = 3;

    private final IconMerger mNotificationIcons;
    private final Context mContext;
    private final SettingsObserver mSettingsObserver;
    private Clock mRightClock, mCenterClock, mLeftClock, mActiveClock;

    private int mClockLocation;
    private int mAmPmStyle;
    private int mIconTint = Color.WHITE;

    class SettingsObserver extends ContentObserver {
        SettingsObserver(Handler handler) {
            super(handler);
        }

        void observe() {
            ContentResolver resolver = mContext.getContentResolver();
            resolver.registerContentObserver(CMSettings.System.getUriFor(
                    CMSettings.System.STATUS_BAR_AM_PM), false, this);
            resolver.registerContentObserver(CMSettings.System.getUriFor(
                    CMSettings.System.STATUS_BAR_CLOCK), false, this);
            updateSettings();
        }

        void unobserve() {
            mContext.getContentResolver().unregisterContentObserver(this);
        }

        @Override
        public void onChange(boolean selfChange) {
            updateSettings();
        }
    }

    public ClockController(View statusBar, IconMerger notificationIcons, Handler handler) {
        mRightClock = (Clock) statusBar.findViewById(R.id.clock);
        mCenterClock = (Clock) statusBar.findViewById(R.id.center_clock);
        mLeftClock = (Clock) statusBar.findViewById(R.id.left_clock);
        mNotificationIcons = notificationIcons;
        mContext = statusBar.getContext();

        mActiveClock = mRightClock;
        mSettingsObserver = new SettingsObserver(handler);
        mSettingsObserver.observe();
    }

    private Clock getClockForCurrentLocation() {
        Clock clockForAlignment;
        switch (mClockLocation) {
            case STYLE_CLOCK_CENTER:
                clockForAlignment = mCenterClock;
                break;
            case STYLE_CLOCK_LEFT:
                clockForAlignment = mLeftClock;
                break;
            case STYLE_CLOCK_RIGHT:
            case STYLE_HIDE_CLOCK:
            default:
                clockForAlignment = mRightClock;
                break;
        }
        return clockForAlignment;
    }

    private void updateActiveClock() {
        mActiveClock.setVisibility(View.GONE);
        if (mClockLocation == STYLE_HIDE_CLOCK) {
            return;
        }

        mActiveClock = getClockForCurrentLocation();
        mActiveClock.setVisibility(View.VISIBLE);
        mActiveClock.setAmPmStyle(mAmPmStyle);

        setClockAndDateStatus();
        setTextColor(mIconTint);
        updateFontSize();
    }

    private void updateSettings() {
        ContentResolver resolver = mContext.getContentResolver();
        mAmPmStyle = CMSettings.System.getInt(resolver,
                CMSettings.System.STATUS_BAR_AM_PM, Clock.AM_PM_STYLE_GONE);
        mClockLocation = CMSettings.System.getInt(
                resolver, CMSettings.System.STATUS_BAR_CLOCK, STYLE_CLOCK_RIGHT);
        updateActiveClock();
    }

    private void setClockAndDateStatus() {
        if (mNotificationIcons != null) {
            mNotificationIcons.setClockAndDateStatus(mClockLocation);
        }
    }

    public void setVisibility(boolean visible) {
        if (mActiveClock != null) {
            mActiveClock.setVisibility(visible ? View.VISIBLE : View.GONE);
        }
    }

    public void setTextColor(int iconTint) {
        mIconTint = iconTint;
        if (mActiveClock != null) {
            mActiveClock.setTextColor(iconTint);
        }
    }

    public void updateFontSize() {
        if (mActiveClock != null) {
            FontSizeUtils.updateFontSize(mActiveClock, R.dimen.status_bar_clock_size);
        }
    }
}
 No newline at end of file
+19 −1
Original line number Diff line number Diff line
@@ -22,12 +22,14 @@ import android.view.View;
import android.widget.LinearLayout;

import com.android.systemui.R;
import com.android.systemui.statusbar.policy.Clock;

public class IconMerger extends LinearLayout {
    private static final String TAG = "IconMerger";
    private static final boolean DEBUG = false;

    private int mIconSize;
    private int mClockLocation;
    private View mMoreView;

    public IconMerger(Context context, AttributeSet attrs) {
@@ -50,6 +52,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 (mClockLocation == ClockController.STYLE_CLOCK_CENTER) {
            int totalWidth = getResources().getDisplayMetrics().widthPixels;
            width = totalWidth / 2 - mIconSize * 2;
        }
        setMeasuredDimension(width - (width % mIconSize), getMeasuredHeight());
    }

@@ -69,7 +75,14 @@ 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 = getResources().getDisplayMetrics().widthPixels;
            if ((mClockLocation != ClockController.STYLE_CLOCK_CENTER &&
                    mClockLocation != ClockController.STYLE_CLOCK_LEFT) ||
                    (visibleChildren > (totalWidth / mIconSize / 2 + 1))) {
                visibleChildren--;
            }
        }
        final boolean moreRequired = visibleChildren * mIconSize > width;
        if (moreRequired != overflowShown) {
            post(new Runnable() {
@@ -80,4 +93,9 @@ public class IconMerger extends LinearLayout {
            });
        }
    }

    public void setClockAndDateStatus(int mode) {
        mClockLocation = mode;

    }
}
+7 −5
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.ArraySet;
import android.view.View;
@@ -42,6 +43,7 @@ import com.android.systemui.R;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.SignalClusterView;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;

@@ -74,7 +76,7 @@ public class StatusBarIconController implements Tunable {
    private View mNotificationIconArea;
    private ImageView mMoreIcon;
    private BatteryMeterView mBatteryMeterView;
    private TextView mClock;
    private ClockController mClockController;

    private int mIconSize;
    private int mIconHPadding;
@@ -118,7 +120,6 @@ public class StatusBarIconController implements Tunable {
        mNotificationIcons.setOverflowIndicator(mMoreIcon);
        mStatusIconsKeyguard = (LinearLayout) keyguardStatusBar.findViewById(R.id.statusIcons);
        mBatteryMeterView = (BatteryMeterView) statusBar.findViewById(R.id.battery);
        mClock = (TextView) statusBar.findViewById(R.id.clock);
        mLinearOutSlowIn = AnimationUtils.loadInterpolator(mContext,
                android.R.interpolator.linear_out_slow_in);
        mFastOutSlowIn = AnimationUtils.loadInterpolator(mContext,
@@ -126,6 +127,7 @@ public class StatusBarIconController implements Tunable {
        mDarkModeIconColorSingleTone = context.getColor(R.color.dark_mode_icon_color_single_tone);
        mLightModeIconColorSingleTone = context.getColor(R.color.light_mode_icon_color_single_tone);
        mHandler = new Handler();
        mClockController = new ClockController(statusBar, mNotificationIcons, mHandler);
        updateResources();

        TunerService.get(mContext).addTunable(this, ICON_BLACKLIST);
@@ -158,7 +160,7 @@ public class StatusBarIconController implements Tunable {
                com.android.internal.R.dimen.status_bar_icon_size);
        mIconHPadding = mContext.getResources().getDimensionPixelSize(
                R.dimen.status_bar_icon_padding);
        FontSizeUtils.updateFontSize(mClock, R.dimen.status_bar_clock_size);
        mClockController.updateFontSize();
    }

    public void addSystemIcon(String slot, int index, int viewIndex, StatusBarIcon icon) {
@@ -262,7 +264,7 @@ public class StatusBarIconController implements Tunable {
    }

    public void setClockVisibility(boolean visible) {
        mClock.setVisibility(visible ? View.VISIBLE : View.GONE);
        mClockController.setVisibility(visible);
    }

    public void dump(PrintWriter pw) {
@@ -391,7 +393,7 @@ public class StatusBarIconController implements Tunable {
        mSignalCluster.setIconTint(mIconTint, mDarkIntensity);
        mMoreIcon.setImageTintList(ColorStateList.valueOf(mIconTint));
        mBatteryMeterView.setDarkIntensity(mDarkIntensity);
        mClock.setTextColor(mIconTint);
        mClockController.setTextColor(mIconTint);
        applyNotificationIconsTint();
    }

+11 −14
Original line number Diff line number Diff line
@@ -53,11 +53,11 @@ public class Clock extends TextView implements DemoMode {
    private SimpleDateFormat mClockFormat;
    private Locale mLocale;

    private static final int AM_PM_STYLE_NORMAL  = 0;
    private static final int AM_PM_STYLE_SMALL   = 1;
    private static final int AM_PM_STYLE_GONE    = 2;
    public static final int AM_PM_STYLE_NORMAL  = 0;
    public static final int AM_PM_STYLE_SMALL   = 1;
    public static final int AM_PM_STYLE_GONE    = 2;

    private final int mAmPmStyle;
    private int mAmPmStyle = AM_PM_STYLE_GONE;

    public Clock(Context context) {
        this(context, null);
@@ -69,15 +69,6 @@ public class Clock extends TextView implements DemoMode {

    public Clock(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        TypedArray a = context.getTheme().obtainStyledAttributes(
                attrs,
                R.styleable.Clock,
                0, 0);
        try {
            mAmPmStyle = a.getInt(R.styleable.Clock_amPmStyle, AM_PM_STYLE_GONE);
        } finally {
            a.recycle();
        }
    }

    @Override
@@ -139,7 +130,7 @@ public class Clock extends TextView implements DemoMode {
    };

    final void updateClock() {
        if (mDemoMode) return;
        if (mDemoMode || mCalendar == null) return;
        mCalendar.setTimeInMillis(System.currentTimeMillis());
        setText(getSmallTime());
    }
@@ -245,5 +236,11 @@ public class Clock extends TextView implements DemoMode {
            setText(getSmallTime());
        }
    }

    public void setAmPmStyle(int style) {
        mAmPmStyle = style;
        mClockFormatString = "";
        updateClock();
    }
}