content: /*
   * Copyright (C) 2013 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.android.datetimepicker.time;
  
  import android.content.Context;
  import android.content.res.Resources;
  import android.graphics.Canvas;
  import android.graphics.Paint;
  import android.util.Log;
  import android.view.View;
  
  import com.android.datetimepicker.R;
  
  /**
   * Draws a simple white circle on which the numbers will be drawn.
   */
  class CircleView extends View {
      private static final String TAG = "CircleView";
  
      private final Paint mPaint = new Paint();
      private boolean mIs24HourMode;
      private int mCircleColor;
      private int mDotColor;
      private float mCircleRadiusMultiplier;
      private float mAmPmCircleRadiusMultiplier;
      private boolean mIsInitialized;
  
      private boolean mDrawValuesReady;
      private int mXCenter;
      private int mYCenter;
      private int mCircleRadius;
  
      public CircleView(Context context) {
          super(context);
  
          Resources res = context.getResources();
          mCircleColor = res.getColor(android.R.color.white);
          mDotColor = res.getColor(R.color.numbers_text_color);
          mPaint.setAntiAlias(true);
  
          mIsInitialized = false;
      }
  
      public void initialize(Context context, boolean is24HourMode) {
          if (mIsInitialized) {
              Log.e(TAG, "CircleView may only be initialized once.");
              return;
          }
  
          Resources res = context.getResources();
          mIs24HourMode = is24HourMode;
          if (is24HourMode) {
              mCircleRadiusMultiplier = Float.parseFloat(
                      res.getString(R.string.circle_radius_multiplier_24HourMode));
          } else {
              mCircleRadiusMultiplier = Float.parseFloat(
                      res.getString(R.string.circle_radius_multiplier));
              mAmPmCircleRadiusMultiplier =
                      Float.parseFloat(res.getString(R.string.ampm_circle_radius_multiplier));
          }
  
          mIsInitialized = true;
      }
  
      /* package */ void setTheme(Context context, boolean dark) {
          Resources res = context.getResources();
          if (dark) {
              mCircleColor = res.getColor(R.color.dark_gray);
              mDotColor = res.getColor(R.color.light_gray);
          } else {
              mCircleColor = res.getColor(android.R.color.white);
              mDotColor = res.getColor(R.color.numbers_text_color);
          }
      }
  
  
      @Override
      public void onDraw(Canvas canvas) {
          int viewWidth = getWidth();
          if (viewWidth == 0 || !mIsInitialized) {
              return;
          }
  
          if (!mDrawValuesReady) {
              mXCenter = getWidth() / 2;
              mYCenter = getHeight() / 2;
              mCircleRadius = (int) (Math.min(mXCenter, mYCenter) * mCircleRadiusMultiplier);
  
              if (!mIs24HourMode) {
                  // We'll need to draw the AM/PM circles, so the main circle will need to have
                  // a slightly higher center. To keep the entire view centered vertically, we'll
                  // have to push it up by half the radius of the AM/PM circles.
                  int amPmCircleRadius = (int) (mCircleRadius * mAmPmCircleRadiusMultiplier);
                  mYCenter -= amPmCircleRadius / 2;
              }
  
              mDrawValuesReady = true;
          }
  
          // Draw the white circle.
          mPaint.setColor(mCircleColor);
          canvas.drawCircle(mXCenter, mYCenter, mCircleRadius, mPaint);
  
          // Draw a small black circle in the center.
          mPaint.setColor(mDotColor);
          canvas.drawCircle(mXCenter, mYCenter, 2, mPaint);
      }
  }
  