17ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka/* 27ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * Copyright (C) 2016 The Android Open Source Project 37ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * 47ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * Licensed under the Apache License, Version 2.0 (the "License"); 57ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * you may not use this file except in compliance with the License. 67ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * You may obtain a copy of the License at 77ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * 87ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * http://www.apache.org/licenses/LICENSE-2.0 97ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * 107ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * Unless required by applicable law or agreed to in writing, software 117ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * distributed under the License is distributed on an "AS IS" BASIS, 127ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * See the License for the specific language governing permissions and 147ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * limitations under the License. 157ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka */ 167ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka 177ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankapackage com.android.settingslib; 187ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka 197ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.content.Context; 207ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.graphics.Canvas; 217ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.graphics.Paint; 227ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.graphics.drawable.Drawable; 237ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankaimport android.text.style.ImageSpan; 247ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka 257ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka/** 267ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka * An extension of ImageSpan which adds a padding before the image. 277ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka */ 287ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shankapublic class RestrictedLockImageSpan extends ImageSpan { 297ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka private Context mContext; 307ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka private final float mExtraPadding; 317ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka private final Drawable mRestrictedPadlock; 327ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka 337ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka public RestrictedLockImageSpan(Context context) { 347ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka // we are overriding getDrawable, so passing null to super class here. 357ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka super((Drawable) null); 367ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka 377ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka mContext = context; 387ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka mExtraPadding = mContext.getResources().getDimensionPixelSize( 3940400a648fdf53b0cbfd7f01dd189ea0138b88ebSudheer Shanka R.dimen.restricted_icon_padding); 407ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka mRestrictedPadlock = RestrictedLockUtils.getRestrictedPadlock(mContext); 417ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka } 427ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka 437ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka @Override 447ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka public Drawable getDrawable() { 457ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka return mRestrictedPadlock; 467ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka } 477ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka 487ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka @Override 497ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, 507ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka int bottom, Paint paint) { 517ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka Drawable drawable = getDrawable(); 527ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka canvas.save(); 537ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka 547ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka // Add extra padding before the padlock. 557ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka float transX = x + mExtraPadding; 5640400a648fdf53b0cbfd7f01dd189ea0138b88ebSudheer Shanka float transY = (bottom - drawable.getBounds().bottom) / 2.0f; 577ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka 587ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka canvas.translate(transX, transY); 597ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka drawable.draw(canvas); 607ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka canvas.restore(); 617ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka } 627ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka 637ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka @Override 647ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka public int getSize(Paint paint, CharSequence text, int start, int end, 657ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka Paint.FontMetricsInt fontMetrics) { 667ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka int size = super.getSize(paint, text, start, end, fontMetrics); 677ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka size += 2 * mExtraPadding; 687ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka return size; 697ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka } 707ff866d286cf4df0948feeffa6e67848740e64ebSudheer Shanka}