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(); 771f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein mUnselectedColor = res.getColor(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); 1061f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein mAmPmTextColor = res.getColor(R.color.white); 1071f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein mSelectedAlpha = SELECTED_ALPHA_THEME_DARK; 1081f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein } else { 1091f129e23db2dc5837a856f7734b15a5a8be6be94Sam Blitzstein mUnselectedColor = res.getColor(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