| Index: chrome/android/java/src/org/chromium/chrome/browser/banners/RatingView.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/banners/RatingView.java b/chrome/android/java/src/org/chromium/chrome/browser/banners/RatingView.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0fd296944b167cbfb6e317e4538cf9c54c3453b1
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/banners/RatingView.java
|
| @@ -0,0 +1,94 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser.banners;
|
| +
|
| +import android.content.Context;
|
| +import android.content.res.Resources;
|
| +import android.graphics.Bitmap;
|
| +import android.graphics.BitmapFactory;
|
| +import android.graphics.Canvas;
|
| +import android.graphics.Matrix;
|
| +import android.graphics.Rect;
|
| +import android.util.AttributeSet;
|
| +import android.view.View;
|
| +
|
| +import org.chromium.chrome.R;
|
| +import org.chromium.ui.base.LocalizationUtils;
|
| +
|
| +/**
|
| + * Displays a set of stars representing a rating for an app.
|
| + */
|
| +public class RatingView extends View {
|
| + private static final int MAX_INCREMENT = 10;
|
| +
|
| + // Bitmaps used to draw the ratings.
|
| + private final Bitmap mStarFull;
|
| + private final Bitmap mStarHalf;
|
| + private final Bitmap mStarEmpty;
|
| +
|
| + /** Stores whether or not the layout is left-to-right. */
|
| + private final boolean mIsLayoutLTR;
|
| +
|
| + /** Variables used for drawing. */
|
| + private final Rect mDrawingRect;
|
| +
|
| + /** Each increment represents 0.5 stars. */
|
| + private int mIncrements;
|
| +
|
| + public RatingView(Context context, AttributeSet params) {
|
| + super(context, params);
|
| + mIsLayoutLTR = !LocalizationUtils.isSystemLayoutDirectionRtl();
|
| + mDrawingRect = new Rect();
|
| +
|
| + // Cache the Bitmaps.
|
| + Resources res = getResources();
|
| + Bitmap starHalf = BitmapFactory.decodeResource(res, R.drawable.btn_star_mini_half);
|
| + if (!mIsLayoutLTR) {
|
| + // RTL mode requires flipping the Bitmap.
|
| + int width = starHalf.getWidth();
|
| + int height = starHalf.getHeight();
|
| + Matrix m = new Matrix();
|
| + m.preScale(-1, 1);
|
| + starHalf = Bitmap.createBitmap(starHalf, 0, 0, width, height, m, false);
|
| + }
|
| + mStarHalf = starHalf;
|
| + mStarFull = BitmapFactory.decodeResource(res, R.drawable.btn_star_mini_full);
|
| + mStarEmpty = BitmapFactory.decodeResource(res, R.drawable.btn_star_mini_empty);
|
| + }
|
| +
|
| + /**
|
| + * Initializes the RatingView.
|
| + * @param rating How many stars to display.
|
| + */
|
| + void initialize(float rating) {
|
| + // Ratings are rounded to the nearest 0.5 increment, like in the Play Store.
|
| + mIncrements = Math.round(rating * 2);
|
| + }
|
| +
|
| + @Override
|
| + public void onDraw(Canvas canvas) {
|
| + int starSize = canvas.getHeight();
|
| +
|
| + // Start off on the left for LTR mode, on the right for RTL.
|
| + mDrawingRect.top = 0;
|
| + mDrawingRect.bottom = starSize;
|
| + mDrawingRect.left = mIsLayoutLTR ? 0 : (canvas.getWidth() - starSize);
|
| + mDrawingRect.right = mDrawingRect.left + starSize;
|
| +
|
| + // Draw all the stars.
|
| + for (int i = 0; i < MAX_INCREMENT; i += 2) {
|
| + Bitmap toShow = mStarEmpty;
|
| + if (i < mIncrements) {
|
| + boolean isFullStar = (mIncrements - i) >= 2;
|
| + toShow = isFullStar ? mStarFull : mStarHalf;
|
| + }
|
| + canvas.drawBitmap(toShow, null, mDrawingRect, null);
|
| +
|
| + // Scooch over to show the next star.
|
| + mDrawingRect.left += (mIsLayoutLTR ? 1 : -1) * starSize;
|
| + mDrawingRect.right = mDrawingRect.left + starSize;
|
| + }
|
| + }
|
| +}
|
|
|