blob: 55ed5aaff95882d948e93b723ae14d4406f4579a [file] [log] [blame]
/*
* Copyright (C) 2021 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.biometrics;
import android.content.Context;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.PathShape;
import android.util.PathParser;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.systemui.R;
/**
* Abstract base class for drawable displayed when the finger is not touching the
* sensor area.
*/
public abstract class UdfpsDrawable extends Drawable {
static final float DEFAULT_STROKE_WIDTH = 3f;
@NonNull final Context mContext;
@NonNull final ShapeDrawable mFingerprintDrawable;
private final Paint mPaint;
private boolean mIlluminationShowing;
int mAlpha = 255; // 0 - 255
public UdfpsDrawable(@NonNull Context context) {
mContext = context;
final String fpPath = context.getResources().getString(R.string.config_udfpsIcon);
mFingerprintDrawable = new ShapeDrawable(
new PathShape(PathParser.createPathFromPathData(fpPath), 72, 72));
mFingerprintDrawable.mutate();
mPaint = mFingerprintDrawable.getPaint();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeCap(Paint.Cap.ROUND);
setStrokeWidth(DEFAULT_STROKE_WIDTH);
}
void setStrokeWidth(float strokeWidth) {
mPaint.setStrokeWidth(strokeWidth);
invalidateSelf();
}
/**
* @param sensorRect the rect coordinates for the sensor area
*/
public void onSensorRectUpdated(@NonNull RectF sensorRect) {
final int margin = (int) sensorRect.height() / 8;
final Rect bounds = new Rect((int) sensorRect.left + margin,
(int) sensorRect.top + margin,
(int) sensorRect.right - margin,
(int) sensorRect.bottom - margin);
updateFingerprintIconBounds(bounds);
}
/**
* Bounds for the fingerprint icon
*/
protected void updateFingerprintIconBounds(@NonNull Rect bounds) {
mFingerprintDrawable.setBounds(bounds);
invalidateSelf();
}
@Override
public void setAlpha(int alpha) {
mAlpha = alpha;
mFingerprintDrawable.setAlpha(mAlpha);
invalidateSelf();
}
boolean isIlluminationShowing() {
return mIlluminationShowing;
}
void setIlluminationShowing(boolean showing) {
if (mIlluminationShowing == showing) {
return;
}
mIlluminationShowing = showing;
invalidateSelf();
}
@Override
public void setColorFilter(@Nullable ColorFilter colorFilter) {
}
@Override
public int getOpacity() {
return 0;
}
}