/*
|
* Copyright (C) 2014 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.systemui.qs;
|
|
import android.content.Context;
|
import android.content.res.Resources;
|
import android.graphics.Canvas;
|
import android.graphics.Paint;
|
import android.graphics.RectF;
|
import android.util.AttributeSet;
|
import android.view.View;
|
|
import com.android.settingslib.Utils;
|
import com.android.systemui.R;
|
|
public class DataUsageGraph extends View {
|
|
private final int mTrackColor;
|
private final int mUsageColor;
|
private final int mOverlimitColor;
|
private final int mWarningColor;
|
private final int mMarkerWidth;
|
private final RectF mTmpRect = new RectF();
|
private final Paint mTmpPaint = new Paint();
|
|
private long mLimitLevel;
|
private long mWarningLevel;
|
private long mUsageLevel;
|
private long mMaxLevel;
|
|
public DataUsageGraph(Context context, AttributeSet attrs) {
|
super(context, attrs);
|
final Resources res = context.getResources();
|
mTrackColor = Utils.getColorStateListDefaultColor(context,
|
R.color.data_usage_graph_track);
|
mWarningColor = Utils.getColorStateListDefaultColor(context,
|
R.color.data_usage_graph_warning);
|
mUsageColor = Utils.getColorAccentDefaultColor(context);
|
mOverlimitColor = Utils.getColorErrorDefaultColor(context);
|
mMarkerWidth = res.getDimensionPixelSize(R.dimen.data_usage_graph_marker_width);
|
}
|
|
public void setLevels(long limitLevel, long warningLevel, long usageLevel) {
|
mLimitLevel = Math.max(0, limitLevel);
|
mWarningLevel = Math.max(0, warningLevel);
|
mUsageLevel = Math.max(0, usageLevel);
|
mMaxLevel = Math.max(Math.max(Math.max(mLimitLevel, mWarningLevel), mUsageLevel), 1);
|
postInvalidate();
|
}
|
|
@Override
|
protected void onDraw(Canvas canvas) {
|
super.onDraw(canvas);
|
|
final RectF r = mTmpRect;
|
final Paint p = mTmpPaint;
|
final int w = getWidth();
|
final int h = getHeight();
|
|
final boolean overLimit = mLimitLevel > 0 && mUsageLevel > mLimitLevel;
|
float usageRight = w * (mUsageLevel / (float) mMaxLevel);
|
if (overLimit) {
|
// compute the gap
|
usageRight = w * (mLimitLevel / (float) mMaxLevel) - (mMarkerWidth / 2);
|
usageRight = Math.min(Math.max(usageRight, mMarkerWidth), w - mMarkerWidth * 2);
|
|
// draw overlimit
|
r.set(usageRight + mMarkerWidth, 0, w, h);
|
p.setColor(mOverlimitColor);
|
canvas.drawRect(r, p);
|
} else {
|
// draw track
|
r.set(0, 0, w, h);
|
p.setColor(mTrackColor);
|
canvas.drawRect(r, p);
|
}
|
|
// draw usage
|
r.set(0, 0, usageRight, h);
|
p.setColor(mUsageColor);
|
canvas.drawRect(r, p);
|
|
// draw warning marker
|
float warningLeft = w * (mWarningLevel / (float) mMaxLevel) - mMarkerWidth / 2;
|
warningLeft = Math.min(Math.max(warningLeft, 0), w - mMarkerWidth);
|
r.set(warningLeft, 0, warningLeft + mMarkerWidth, h);
|
p.setColor(mWarningColor);
|
canvas.drawRect(r, p);
|
}
|
}
|