1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.settingslib;
18
19import android.content.Context;
20import android.graphics.Canvas;
21import android.graphics.Paint;
22import android.graphics.drawable.Drawable;
23import android.text.style.ImageSpan;
24
25/**
26 * An extension of ImageSpan which adds a padding before the image.
27 */
28public class RestrictedLockImageSpan extends ImageSpan {
29    private Context mContext;
30    private final float mExtraPadding;
31    private final Drawable mRestrictedPadlock;
32
33    public RestrictedLockImageSpan(Context context) {
34        // we are overriding getDrawable, so passing null to super class here.
35        super((Drawable) null);
36
37        mContext = context;
38        mExtraPadding = mContext.getResources().getDimensionPixelSize(
39                R.dimen.restricted_icon_padding);
40        mRestrictedPadlock = RestrictedLockUtils.getRestrictedPadlock(mContext);
41    }
42
43    @Override
44    public Drawable getDrawable() {
45        return mRestrictedPadlock;
46    }
47
48    @Override
49    public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y,
50            int bottom, Paint paint) {
51        Drawable drawable = getDrawable();
52        canvas.save();
53
54        // Add extra padding before the padlock.
55        float transX = x + mExtraPadding;
56        float transY = (bottom - drawable.getBounds().bottom) / 2.0f;
57
58        canvas.translate(transX, transY);
59        drawable.draw(canvas);
60        canvas.restore();
61    }
62
63    @Override
64    public int getSize(Paint paint, CharSequence text, int start, int end,
65            Paint.FontMetricsInt fontMetrics) {
66        int size = super.getSize(paint, text, start, end, fontMetrics);
67        size += 2 * mExtraPadding;
68        return size;
69    }
70}