/* * Copyright (C) 2011-12 asksven * * 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.asksven.betterbatterystats.widgets; import java.util.ArrayList; import com.asksven.betterbatterystats.LogSettings; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.preference.PreferenceManager; import android.util.Log; /** * @author sven * */ public class WidgetBars { static final String TAG = "WidgetBars"; static final float STROKE_WIDTH = 1; static final int BAR_WIDTH = 6; static final int BITMAP_WIDTH = 256; static final int BITMAP_HEIGHT = 70; static Paint[] m_paint = new Paint[6]; static Paint m_paintBackground = new Paint(); void initPaints(Context ctx) { SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(ctx); int opacity = sharedPrefs.getInt("small_widget_opacity", 80); opacity = (255 * opacity) / 100; m_paintBackground.setStyle(Paint.Style.FILL); m_paintBackground.setColor(Color.BLACK); m_paintBackground.setStrokeWidth(STROKE_WIDTH); m_paintBackground.setAlpha(opacity); m_paint[0] = new Paint(); m_paint[0].setStyle(Paint.Style.FILL); m_paint[0].setColor(Color.BLUE); m_paint[0].setStrokeWidth(STROKE_WIDTH); // m_paint[0].setStyle(Paint.Style.STROKE); m_paint[0].setAlpha(opacity); m_paint[1] = new Paint(); m_paint[1].setStyle(Paint.Style.FILL); m_paint[1].setColor(Color.GREEN); m_paint[1].setStrokeWidth(STROKE_WIDTH); // m_paint[1].setStyle(Paint.Style.STROKE); m_paint[1].setAlpha(opacity); m_paint[2] = new Paint(); m_paint[2].setStyle(Paint.Style.FILL); m_paint[2].setColor(Color.YELLOW); m_paint[2].setStrokeWidth(STROKE_WIDTH); // m_paint[2].setStyle(Paint.Style.STROKE); m_paint[2].setAlpha(opacity); m_paint[3] = new Paint(); m_paint[3].setStyle(Paint.Style.FILL); m_paint[3].setColor(Color.WHITE); m_paint[3].setStrokeWidth(STROKE_WIDTH); // m_paint[3].setStyle(Paint.Style.STROKE); m_paint[3].setAlpha(opacity); m_paint[4] = new Paint(); m_paint[4].setStyle(Paint.Style.FILL); m_paint[4].setColor(Color.MAGENTA); m_paint[4].setStrokeWidth(STROKE_WIDTH); // m_paint[4].setStyle(Paint.Style.STROKE); m_paint[4].setAlpha(opacity); m_paint[5] = new Paint(); m_paint[5].setStyle(Paint.Style.FILL); m_paint[5].setColor(Color.CYAN); m_paint[5].setStrokeWidth(STROKE_WIDTH); // m_paint[5].setStyle(Paint.Style.STROKE); m_paint[5].setAlpha(opacity); } public Bitmap getBitmap(Context ctx, ArrayList<Long> values) { this.initPaints(ctx); long max = 0; for (int i=0; i < values.size(); i++) { if (values.get(i) > max) { max = values.get(i); } } Bitmap bitmap = Bitmap.createBitmap(BITMAP_WIDTH, BITMAP_HEIGHT, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.drawColor(Color.TRANSPARENT); for (int i=0; i < values.size(); i++) { float ratio = (float)values.get(i) / (float)max; int len = (int) (BITMAP_WIDTH*ratio); if (LogSettings.DEBUG) { Log.d(TAG, "Drawing line for value " + len + ",ratio is " + ratio + ", value is " + values.get(i)); } int pos = i*10+10; // canvas.drawLine(0, pos, len, pos, m_paint[i]); canvas.drawRect(0, pos, len, pos + BAR_WIDTH, m_paint[i]); } return bitmap; } }