Merge "Enable easier burn in testing" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-02-22 14:22:57 +00:00
committed by Android (Google) Code Review
7 changed files with 53 additions and 14 deletions

View File

@@ -19,8 +19,10 @@ package com.android.systemui.biometrics;
import android.content.Context; import android.content.Context;
import android.graphics.RectF; import android.graphics.RectF;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.systemui.R; import com.android.systemui.R;
@@ -33,6 +35,7 @@ public abstract class UdfpsAnimation extends Drawable {
@NonNull protected final Context mContext; @NonNull protected final Context mContext;
@NonNull protected final Drawable mFingerprintDrawable; @NonNull protected final Drawable mFingerprintDrawable;
@Nullable private View mView;
public UdfpsAnimation(@NonNull Context context) { public UdfpsAnimation(@NonNull Context context) {
mContext = context; mContext = context;
@@ -53,6 +56,10 @@ public abstract class UdfpsAnimation extends Drawable {
mFingerprintDrawable.setAlpha(alpha); mFingerprintDrawable.setAlpha(alpha);
} }
public void setAnimationView(UdfpsAnimationView view) {
mView = view;
}
/** /**
* @return The amount of padding that's needed on each side of the sensor, in pixels. * @return The amount of padding that's needed on each side of the sensor, in pixels.
*/ */
@@ -66,4 +73,10 @@ public abstract class UdfpsAnimation extends Drawable {
public int getPaddingY() { public int getPaddingY() {
return 0; return 0;
} }
protected void postInvalidateView() {
if (mView != null) {
mView.postInvalidate();
}
}
} }

View File

@@ -23,7 +23,6 @@ import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.ColorFilter; import android.graphics.ColorFilter;
import android.util.MathUtils; import android.util.MathUtils;
import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -42,7 +41,6 @@ public class UdfpsAnimationKeyguard extends UdfpsAnimation implements DozeReceiv
private static final String TAG = "UdfpsAnimationKeyguard"; private static final String TAG = "UdfpsAnimationKeyguard";
@NonNull private final View mParent;
@NonNull private final Context mContext; @NonNull private final Context mContext;
private final int mMaxBurnInOffsetX; private final int mMaxBurnInOffsetX;
private final int mMaxBurnInOffsetY; private final int mMaxBurnInOffsetY;
@@ -52,10 +50,9 @@ public class UdfpsAnimationKeyguard extends UdfpsAnimation implements DozeReceiv
private float mBurnInOffsetX; private float mBurnInOffsetX;
private float mBurnInOffsetY; private float mBurnInOffsetY;
UdfpsAnimationKeyguard(@NonNull View parent, @NonNull Context context, UdfpsAnimationKeyguard(@NonNull Context context,
@NonNull StatusBarStateController statusBarStateController) { @NonNull StatusBarStateController statusBarStateController) {
super(context); super(context);
mParent = parent;
mContext = context; mContext = context;
mMaxBurnInOffsetX = context.getResources() mMaxBurnInOffsetX = context.getResources()
@@ -73,10 +70,10 @@ public class UdfpsAnimationKeyguard extends UdfpsAnimation implements DozeReceiv
mInterpolatedDarkAmount); mInterpolatedDarkAmount);
mBurnInOffsetY = MathUtils.lerp(0f, mBurnInOffsetY = MathUtils.lerp(0f,
getBurnInOffset(mMaxBurnInOffsetY * 2, false /* xAxis */) getBurnInOffset(mMaxBurnInOffsetY * 2, false /* xAxis */)
- 0.5f * mMaxBurnInOffsetY, - mMaxBurnInOffsetY,
mInterpolatedDarkAmount); mInterpolatedDarkAmount);
updateColor(); updateColor();
mParent.postInvalidate(); postInvalidateView();
} }
@Override @Override

View File

@@ -74,7 +74,14 @@ public class UdfpsAnimationView extends View implements DozeReceiver,
} }
void setAnimation(@Nullable UdfpsAnimation animation) { void setAnimation(@Nullable UdfpsAnimation animation) {
if (mUdfpsAnimation != null) {
mUdfpsAnimation.setAnimationView(null);
}
mUdfpsAnimation = animation; mUdfpsAnimation = animation;
if (mUdfpsAnimation != null) {
mUdfpsAnimation.setAnimationView(this);
}
} }
void onSensorRectUpdated(@NonNull RectF sensorRect) { void onSensorRectUpdated(@NonNull RectF sensorRect) {

View File

@@ -44,7 +44,6 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.doze.DozeReceiver; import com.android.systemui.doze.DozeReceiver;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor;
@@ -324,7 +323,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
case IUdfpsOverlayController.REASON_ENROLL_ENROLLING: case IUdfpsOverlayController.REASON_ENROLL_ENROLLING:
return new UdfpsAnimationEnroll(mContext); return new UdfpsAnimationEnroll(mContext);
case IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD: case IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD:
return new UdfpsAnimationKeyguard(mView, mContext, mStatusBarStateController); return new UdfpsAnimationKeyguard(mContext, mStatusBarStateController);
case IUdfpsOverlayController.REASON_AUTH_FPM_OTHER: case IUdfpsOverlayController.REASON_AUTH_FPM_OTHER:
return new UdfpsAnimationFpmOther(mContext); return new UdfpsAnimationFpmOther(mContext);
default: default:

View File

@@ -113,6 +113,7 @@ public class UdfpsView extends FrameLayout implements DozeReceiver, UdfpsIllumin
void setExtras(@Nullable UdfpsAnimation animation, @Nullable UdfpsEnrollHelper enrollHelper) { void setExtras(@Nullable UdfpsAnimation animation, @Nullable UdfpsEnrollHelper enrollHelper) {
mAnimationView.setAnimation(animation); mAnimationView.setAnimation(animation);
mEnrollHelper = enrollHelper; mEnrollHelper = enrollHelper;
if (enrollHelper != null) { if (enrollHelper != null) {

View File

@@ -32,6 +32,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.doze.dagger.DozeScope; import com.android.systemui.doze.dagger.DozeScope;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.AlarmTimeout; import com.android.systemui.util.AlarmTimeout;
@@ -41,12 +42,15 @@ import java.util.Calendar;
import javax.inject.Inject; import javax.inject.Inject;
import dagger.Lazy;
/** /**
* The policy controlling doze. * The policy controlling doze.
*/ */
@DozeScope @DozeScope
public class DozeUi implements DozeMachine.Part, TunerService.Tunable { public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
// if enabled, calls dozeTimeTick() whenever the time changes:
private static final boolean BURN_IN_TESTING_ENABLED = false;
private static final long TIME_TICK_DEADLINE_MILLIS = 90 * 1000; // 1.5min private static final long TIME_TICK_DEADLINE_MILLIS = 90 * 1000; // 1.5min
private final Context mContext; private final Context mContext;
private final DozeHost mHost; private final DozeHost mHost;
@@ -57,16 +61,28 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
private final boolean mCanAnimateTransition; private final boolean mCanAnimateTransition;
private final DozeParameters mDozeParameters; private final DozeParameters mDozeParameters;
private final DozeLog mDozeLog; private final DozeLog mDozeLog;
private final Lazy<StatusBarStateController> mStatusBarStateController;
private boolean mKeyguardShowing; private boolean mKeyguardShowing;
private final KeyguardUpdateMonitorCallback mKeyguardVisibilityCallback = private final KeyguardUpdateMonitorCallback mKeyguardVisibilityCallback =
new KeyguardUpdateMonitorCallback() { new KeyguardUpdateMonitorCallback() {
@Override @Override
public void onKeyguardVisibilityChanged(boolean showing) { public void onKeyguardVisibilityChanged(boolean showing) {
mKeyguardShowing = showing; mKeyguardShowing = showing;
updateAnimateScreenOff(); updateAnimateScreenOff();
} }
@Override
public void onTimeChanged() {
if (BURN_IN_TESTING_ENABLED && mStatusBarStateController != null
&& mStatusBarStateController.get().isDozing()) {
// update whenever the time changes for manual burn in testing
mHost.dozeTimeTick();
// Keep wakelock until a frame has been pushed.
mHandler.post(mWakeLock.wrap(() -> {}));
}
}
}; };
private long mLastTimeTickElapsed = 0; private long mLastTimeTickElapsed = 0;
@@ -75,7 +91,8 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
public DozeUi(Context context, AlarmManager alarmManager, public DozeUi(Context context, AlarmManager alarmManager,
WakeLock wakeLock, DozeHost host, @Main Handler handler, WakeLock wakeLock, DozeHost host, @Main Handler handler,
DozeParameters params, KeyguardUpdateMonitor keyguardUpdateMonitor, DozeParameters params, KeyguardUpdateMonitor keyguardUpdateMonitor,
DozeLog dozeLog, TunerService tunerService) { DozeLog dozeLog, TunerService tunerService,
Lazy<StatusBarStateController> statusBarStateController) {
mContext = context; mContext = context;
mWakeLock = wakeLock; mWakeLock = wakeLock;
mHost = host; mHost = host;
@@ -85,8 +102,8 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", handler); mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", handler);
keyguardUpdateMonitor.registerCallback(mKeyguardVisibilityCallback); keyguardUpdateMonitor.registerCallback(mKeyguardVisibilityCallback);
mDozeLog = dozeLog; mDozeLog = dozeLog;
tunerService.addTunable(this, Settings.Secure.DOZE_ALWAYS_ON); tunerService.addTunable(this, Settings.Secure.DOZE_ALWAYS_ON);
mStatusBarStateController = statusBarStateController;
} }
@Override @Override

View File

@@ -41,6 +41,7 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.wakelock.WakeLockFake; import com.android.systemui.util.wakelock.WakeLockFake;
@@ -74,6 +75,8 @@ public class DozeUiTest extends SysuiTestCase {
private Handler mHandler; private Handler mHandler;
private HandlerThread mHandlerThread; private HandlerThread mHandlerThread;
private DozeUi mDozeUi; private DozeUi mDozeUi;
@Mock
private StatusBarStateController mStatusBarStateController;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
@@ -85,7 +88,8 @@ public class DozeUiTest extends SysuiTestCase {
mHandler = mHandlerThread.getThreadHandler(); mHandler = mHandlerThread.getThreadHandler();
mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler, mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler,
mDozeParameters, mKeyguardUpdateMonitor, mDozeLog, mTunerService); mDozeParameters, mKeyguardUpdateMonitor, mDozeLog, mTunerService,
() -> mStatusBarStateController);
mDozeUi.setDozeMachine(mMachine); mDozeUi.setDozeMachine(mMachine);
} }
@@ -141,7 +145,8 @@ public class DozeUiTest extends SysuiTestCase {
reset(mHost); reset(mHost);
when(mDozeParameters.getDisplayNeedsBlanking()).thenReturn(true); when(mDozeParameters.getDisplayNeedsBlanking()).thenReturn(true);
mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler, mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler,
mDozeParameters, mKeyguardUpdateMonitor, mDozeLog, mTunerService); mDozeParameters, mKeyguardUpdateMonitor, mDozeLog, mTunerService,
() -> mStatusBarStateController);
mDozeUi.setDozeMachine(mMachine); mDozeUi.setDozeMachine(mMachine);
// Never animate if display doesn't support it. // Never animate if display doesn't support it.