1250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka/* 2250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * Copyright (C) 2013 The Android Open Source Project 3250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * 4250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * Licensed under the Apache License, Version 2.0 (the "License"); 5250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * you may not use this file except in compliance with the License. 6250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * You may obtain a copy of the License at 7250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * 8250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * http://www.apache.org/licenses/LICENSE-2.0 9250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * 10250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * Unless required by applicable law or agreed to in writing, software 11250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * distributed under the License is distributed on an "AS IS" BASIS, 12250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * See the License for the specific language governing permissions and 14250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka * limitations under the License. 15250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka */ 16250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka 17250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataokapackage com.android.inputmethod.keyboard; 18250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka 19250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataokaimport com.android.inputmethod.latin.R; 20250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka 21250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataokaimport android.content.Context; 22250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataokaimport android.graphics.Canvas; 23250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataokaimport android.graphics.Paint; 24250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataokaimport android.util.AttributeSet; 25250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataokaimport android.widget.LinearLayout; 26250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka 27250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataokapublic class EmojiCategoryPageIndicatorView extends LinearLayout { 28250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka private static final float BOTTOM_MARGIN_RATIO = 0.66f; 29250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka private final Paint mPaint = new Paint(); 30250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka private int mCategoryPageSize = 0; 31250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka private int mCurrentCategoryPageId = 0; 32250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka private float mOffset = 0.0f; 33250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka 34250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka public EmojiCategoryPageIndicatorView(Context context) { 35250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka this(context, null /* attrs */); 36250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka } 37250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka 38250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka public EmojiCategoryPageIndicatorView(Context context, AttributeSet attrs) { 39250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka super(context, attrs); 40250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka mPaint.setColor(context.getResources().getColor( 41250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka R.color.emoji_category_page_id_view_foreground)); 42250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka } 43250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka 44250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka public void setCategoryPageId(int size, int id, float offset) { 45250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka mCategoryPageSize = size; 46250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka mCurrentCategoryPageId = id; 47250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka mOffset = offset; 48250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka invalidate(); 49250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka } 50250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka 51250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka @Override 52250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka protected void onDraw(Canvas canvas) { 53a4913994c2904eefa861782966a288959b216713Satoshi Kataoka if (mCategoryPageSize <= 1) { 54a4913994c2904eefa861782966a288959b216713Satoshi Kataoka // If the category is not set yet or contains only one category, 55a4913994c2904eefa861782966a288959b216713Satoshi Kataoka // just clear and return. 56250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka canvas.drawColor(0); 57250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka return; 58250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka } 59250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka final float height = getHeight(); 60250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka final float width = getWidth(); 61250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka final float unitWidth = width / mCategoryPageSize; 62250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka final float left = unitWidth * mCurrentCategoryPageId + mOffset * unitWidth; 63250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka final float top = 0.0f; 64250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka final float right = left + unitWidth; 65250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka final float bottom = height * BOTTOM_MARGIN_RATIO; 66250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka canvas.drawRect(left, top, right, bottom, mPaint); 67250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka } 68250a12f6c216f65f3b6459b9fa620d20a6b94475Satoshi Kataoka} 69