package com.android.systemui.statusbar.phone;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Rect;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.tuner.TunerService;
import static com.android.systemui.statusbar.policy.Clock.AM_PM_STYLE_GONE;
import static com.android.systemui.statusbar.policy.Clock.CLOCK_SECONDS;
/**
* To control your...clock
*/
public class ClockController implements TunerService.Tunable {
private static final String TAG = "ClockController";
public static final int STYLE_CLOCK_RIGHT = 1;
public static final int STYLE_CLOCK_CENTER = 2;
public static final int STYLE_CLOCK_LEFT = 3;
public static final String CLOCK_POSITION = "cmsystem:status_bar_clock";
public static final String CLOCK_STYLE = "cmsystem:status_bar_am_pm";
private final NotificationIconAreaController mNotificationIconAreaController;
private final Context mContext;
private Clock mRightClock, mCenterClock, mLeftClock, mActiveClock;
private int mAmPmStyle = AM_PM_STYLE_GONE;
private int mClockPosition = STYLE_CLOCK_RIGHT;
private boolean mClockVisible = true;
private boolean mShowSeconds = false;
private int mIconTint = Color.WHITE;
public ClockController(View statusBar,
NotificationIconAreaController notificationIconAreaController, 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);
mNotificationIconAreaController = notificationIconAreaController;
mContext = statusBar.getContext();
mActiveClock = mRightClock;
TunerService.get(mContext).addTunable(this, CLOCK_POSITION, CLOCK_STYLE, CLOCK_SECONDS);
}
private Clock getClockForCurrentLocation() {
Clock clockForAlignment;
switch (mClockPosition) {
case STYLE_CLOCK_CENTER:
clockForAlignment = mCenterClock;
break;
case STYLE_CLOCK_LEFT:
clockForAlignment = mLeftClock;
break;
case STYLE_CLOCK_RIGHT:
default:
clockForAlignment = mRightClock;
break;
}
return clockForAlignment;
}
private void updateActiveClock() {
mActiveClock.setVisibility(View.GONE);
if (!mClockVisible) {
return;
}
mActiveClock = getClockForCurrentLocation();
mActiveClock.setVisibility(View.VISIBLE);
mActiveClock.setAmPmStyle(mAmPmStyle);
mActiveClock.setShowSeconds(mShowSeconds);
setClockAndDateStatus();
setTextColor(mIconTint);
updateFontSize();
}
@Override
public void onTuningChanged(String key, String newValue) {
Log.d(TAG, "onTuningChanged key=" + key + " value=" + newValue);
if (CLOCK_POSITION.equals(key)) {
mClockPosition = newValue == null ? STYLE_CLOCK_RIGHT : Integer.valueOf(newValue);
} else if (CLOCK_STYLE.equals(key)) {
mAmPmStyle = newValue == null ? AM_PM_STYLE_GONE : Integer.valueOf(newValue);
} else if (CLOCK_SECONDS.equals(key)) {
mShowSeconds = newValue != null && Integer.parseInt(newValue) != 0;
}
updateActiveClock();
}
private void setClockAndDateStatus() {
if (mNotificationIconAreaController != null) {
mNotificationIconAreaController.setClockAndDateStatus(mClockPosition);
}
}
public void setVisibility(boolean visible) {
if (mActiveClock != null) {
mActiveClock.setVisibility(visible ? View.VISIBLE : View.GONE);
}
mClockVisible = visible;
}
public void setTextColor(int iconTint) {
mIconTint = iconTint;
if (mActiveClock != null) {
mActiveClock.setTextColor(iconTint);
}
}
public void setTextColor(Rect tintArea, int iconTint) {
if (mActiveClock != null) {
setTextColor(StatusBarIconController.getTint(tintArea, mActiveClock, iconTint));
}
}
public void updateFontSize() {
if (mActiveClock != null) {
FontSizeUtils.updateFontSize(mActiveClock, R.dimen.status_bar_clock_size);
}
}
public void setPaddingRelative(int start, int top, int end, int bottom) {
if (mActiveClock != null) {
mActiveClock.setPaddingRelative(start, top, end, bottom);
}
}
}