Merge "Enable easier burn in testing" into sc-dev am: 781fa1804b
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13619626 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: Ic533a73bcdcef360c3113f695ad6a33cd2dc5f38
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user