16e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein/*
26e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein * Copyright (C) 2013 The Android Open Source Project
36e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein *
46e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein * Licensed under the Apache License, Version 2.0 (the "License");
56e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein * you may not use this file except in compliance with the License.
66e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein * You may obtain a copy of the License at
76e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein *
86e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein *      http://www.apache.org/licenses/LICENSE-2.0
96e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein *
106e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein * Unless required by applicable law or agreed to in writing, software
116e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein * distributed under the License is distributed on an "AS IS" BASIS,
126e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein * See the License for the specific language governing permissions and
146e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein * limitations under the License.
156e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein */
166e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
17b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzsteinpackage com.android.datetimepicker.time;
186e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
196e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzsteinimport android.content.Context;
206e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzsteinimport android.content.res.Resources;
216e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzsteinimport android.graphics.Canvas;
226e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzsteinimport android.graphics.Paint;
236e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzsteinimport android.graphics.Typeface;
246e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzsteinimport android.graphics.Paint.Align;
256e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzsteinimport android.util.Log;
266e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzsteinimport android.view.View;
276e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
286e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzsteinimport com.android.datetimepicker.R;
291f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzsteinimport com.android.datetimepicker.Utils;
306e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
31b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzsteinimport java.text.DateFormatSymbols;
32b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein
33f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein/**
34f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein * Draw the two smaller AM and PM circles next to where the larger circle will be.
35f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein */
366e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzsteinpublic class AmPmCirclesView extends View {
376e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private static final String TAG = "AmPmCirclesView";
386e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
391f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein    // Alpha level for selected circle.
401f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein    private static final int SELECTED_ALPHA = Utils.SELECTED_ALPHA;
411f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein    private static final int SELECTED_ALPHA_THEME_DARK = Utils.SELECTED_ALPHA_THEME_DARK;
42d5ec70d18c6379015acd4725b8804ab79f30bfa0Sam Blitzstein
436e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private final Paint mPaint = new Paint();
441f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein    private int mSelectedAlpha;
451f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein    private int mUnselectedColor;
46f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein    private int mAmPmTextColor;
471f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein    private int mSelectedColor;
486e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private float mCircleRadiusMultiplier;
496e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private float mAmPmCircleRadiusMultiplier;
506e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private String mAmText;
516e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private String mPmText;
526e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private boolean mIsInitialized;
536e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
546e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private static final int AM = TimePickerDialog.AM;
556e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private static final int PM = TimePickerDialog.PM;
566e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
576e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private boolean mDrawValuesReady;
586e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private int mAmPmCircleRadius;
596e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private int mAmXCenter;
606e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private int mPmXCenter;
616e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private int mAmPmYCenter;
626e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private int mAmOrPm;
636e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    private int mAmOrPmPressed;
646e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
656e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    public AmPmCirclesView(Context context) {
666e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        super(context);
676e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mIsInitialized = false;
686e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    }
696e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
706e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    public void initialize(Context context, int amOrPm) {
716e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        if (mIsInitialized) {
726e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            Log.e(TAG, "AmPmCirclesView may only be initialized once.");
736e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            return;
746e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        }
756e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
766e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        Resources res = context.getResources();
77a09b3c940e98b8606a16a94b48b6d0121d9d3635Scott Kennedy        mUnselectedColor = res.getColor(android.R.color.white);
781f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein        mSelectedColor = res.getColor(R.color.blue);
79f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein        mAmPmTextColor = res.getColor(R.color.ampm_text_color);
801f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein        mSelectedAlpha = SELECTED_ALPHA;
813d5a23b698cb8c59f43914ea2f9bb4fb36575f88Sam Blitzstein        String typefaceFamily = res.getString(R.string.sans_serif);
823d5a23b698cb8c59f43914ea2f9bb4fb36575f88Sam Blitzstein        Typeface tf = Typeface.create(typefaceFamily, Typeface.NORMAL);
836e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mPaint.setTypeface(tf);
846e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mPaint.setAntiAlias(true);
856e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mPaint.setTextAlign(Align.CENTER);
866e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
876e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mCircleRadiusMultiplier =
886e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein                Float.parseFloat(res.getString(R.string.circle_radius_multiplier));
896e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mAmPmCircleRadiusMultiplier =
906e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein                Float.parseFloat(res.getString(R.string.ampm_circle_radius_multiplier));
91b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein        String[] amPmTexts = new DateFormatSymbols().getAmPmStrings();
92b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein        mAmText = amPmTexts[0];
93b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein        mPmText = amPmTexts[1];
946e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
956e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        setAmOrPm(amOrPm);
966e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mAmOrPmPressed = -1;
976e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
986e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mIsInitialized = true;
996e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    }
1006e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
1011f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein    /* package */ void setTheme(Context context, boolean themeDark) {
1021f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein        Resources res = context.getResources();
1031f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein        if (themeDark) {
1041f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            mUnselectedColor = res.getColor(R.color.dark_gray);
1051f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            mSelectedColor = res.getColor(R.color.red);
106a09b3c940e98b8606a16a94b48b6d0121d9d3635Scott Kennedy            mAmPmTextColor = res.getColor(android.R.color.white);
1071f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            mSelectedAlpha = SELECTED_ALPHA_THEME_DARK;
1081f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein        } else {
109a09b3c940e98b8606a16a94b48b6d0121d9d3635Scott Kennedy            mUnselectedColor = res.getColor(android.R.color.white);
1101f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            mSelectedColor = res.getColor(R.color.blue);
1111f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            mAmPmTextColor = res.getColor(R.color.ampm_text_color);
1121f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            mSelectedAlpha = SELECTED_ALPHA;
1131f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein        }
1141f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein    }
1151f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein
1166e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    public void setAmOrPm(int amOrPm) {
1176e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mAmOrPm = amOrPm;
1186e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    }
1196e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
1206e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    public void setAmOrPmPressed(int amOrPmPressed) {
1216e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mAmOrPmPressed = amOrPmPressed;
1226e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    }
1236e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
124f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein    /**
125f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein     * Calculate whether the coordinates are touching the AM or PM circle.
126f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein     */
1276e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    public int getIsTouchingAmOrPm(float xCoord, float yCoord) {
1286e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        if (!mDrawValuesReady) {
1296e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            return -1;
1306e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        }
1316e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
1326e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        int squaredYDistance = (int) ((yCoord - mAmPmYCenter)*(yCoord - mAmPmYCenter));
1336e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
1346e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        int distanceToAmCenter =
1356e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein                (int) Math.sqrt((xCoord - mAmXCenter)*(xCoord - mAmXCenter) + squaredYDistance);
1366e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        if (distanceToAmCenter <= mAmPmCircleRadius) {
1376e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            return AM;
1386e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        }
1396e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
1406e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        int distanceToPmCenter =
1416e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein                (int) Math.sqrt((xCoord - mPmXCenter)*(xCoord - mPmXCenter) + squaredYDistance);
1426e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        if (distanceToPmCenter <= mAmPmCircleRadius) {
1436e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            return PM;
1446e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        }
1456e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
1466e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        // Neither was close enough.
1476e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        return -1;
1486e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    }
1496e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
1506e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    @Override
1516e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    public void onDraw(Canvas canvas) {
1526e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        int viewWidth = getWidth();
1536e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        if (viewWidth == 0 || !mIsInitialized) {
1546e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            return;
1556e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        }
1566e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
1576e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        if (!mDrawValuesReady) {
1586e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            int layoutXCenter = getWidth() / 2;
1596e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            int layoutYCenter = getHeight() / 2;
1606e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            int circleRadius =
1616e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein                    (int) (Math.min(layoutXCenter, layoutYCenter) * mCircleRadiusMultiplier);
1626e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            mAmPmCircleRadius = (int) (circleRadius * mAmPmCircleRadiusMultiplier);
163d5ec70d18c6379015acd4725b8804ab79f30bfa0Sam Blitzstein            int textSize = mAmPmCircleRadius * 3 / 4;
1646e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            mPaint.setTextSize(textSize);
1656e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
1666e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            // Line up the vertical center of the AM/PM circles with the bottom of the main circle.
1676e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            mAmPmYCenter = layoutYCenter - mAmPmCircleRadius / 2 + circleRadius;
1686e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            // Line up the horizontal edges of the AM/PM circles with the horizontal edges
1696e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            // of the main circle.
1706e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            mAmXCenter = layoutXCenter - circleRadius + mAmPmCircleRadius;
1716e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            mPmXCenter = layoutXCenter + circleRadius - mAmPmCircleRadius;
1726e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
1736e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein            mDrawValuesReady = true;
1746e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        }
1756e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
176d5ec70d18c6379015acd4725b8804ab79f30bfa0Sam Blitzstein        // We'll need to draw either a lighter blue (for selection), a darker blue (for touching)
177f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein        // or white (for not selected).
1781f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein        int amColor = mUnselectedColor;
1796e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        int amAlpha = 255;
1801f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein        int pmColor = mUnselectedColor;
1816e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        int pmAlpha = 255;
1826e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        if (mAmOrPm == AM) {
1831f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            amColor = mSelectedColor;
1841f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            amAlpha = mSelectedAlpha;
1856e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        } else if (mAmOrPm == PM) {
1861f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            pmColor = mSelectedColor;
1871f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            pmAlpha = mSelectedAlpha;
1886e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        }
1896e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        if (mAmOrPmPressed == AM) {
1901f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            amColor = mSelectedColor;
1911f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            amAlpha = mSelectedAlpha;
1926e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        } else if (mAmOrPmPressed == PM) {
1931f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            pmColor = mSelectedColor;
1941f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein            pmAlpha = mSelectedAlpha;
1956e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        }
1966e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
197f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein        // Draw the two circles.
1986e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mPaint.setColor(amColor);
1996e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mPaint.setAlpha(amAlpha);
2006e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        canvas.drawCircle(mAmXCenter, mAmPmYCenter, mAmPmCircleRadius, mPaint);
2016e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mPaint.setColor(pmColor);
2026e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        mPaint.setAlpha(pmAlpha);
2036e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        canvas.drawCircle(mPmXCenter, mAmPmYCenter, mAmPmCircleRadius, mPaint);
2046e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein
205f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein        // Draw the AM/PM texts on top.
206f3b38bd61d583d31200c501f5a74392aac510657Sam Blitzstein        mPaint.setColor(mAmPmTextColor);
2076e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        int textYCenter = mAmPmYCenter - (int) (mPaint.descent() + mPaint.ascent()) / 2;
2086e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        canvas.drawText(mAmText, mAmXCenter, textYCenter, mPaint);
2096e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein        canvas.drawText(mPmText, mPmXCenter, textYCenter, mPaint);
2106e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein    }
2116e896f805cac499b777c98755149f07ccd7ba5c3Sam Blitzstein}
212