Merge changes Iad608121,Ib998a99b into sc-dev
* changes: Fix issues with interrupted screen off animations. Update animateScreenOff when AOD preferences change.
This commit is contained in:
@@ -23,6 +23,7 @@ import android.app.AlarmManager;
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.os.SystemClock;
|
||||
import android.provider.Settings;
|
||||
import android.text.format.Formatter;
|
||||
import android.util.Log;
|
||||
|
||||
@@ -32,6 +33,7 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.doze.dagger.DozeScope;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.util.AlarmTimeout;
|
||||
import com.android.systemui.util.wakelock.WakeLock;
|
||||
|
||||
@@ -43,7 +45,7 @@ import javax.inject.Inject;
|
||||
* The policy controlling doze.
|
||||
*/
|
||||
@DozeScope
|
||||
public class DozeUi implements DozeMachine.Part {
|
||||
public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
|
||||
|
||||
private static final long TIME_TICK_DEADLINE_MILLIS = 90 * 1000; // 1.5min
|
||||
private final Context mContext;
|
||||
@@ -73,7 +75,7 @@ public class DozeUi implements DozeMachine.Part {
|
||||
public DozeUi(Context context, AlarmManager alarmManager,
|
||||
WakeLock wakeLock, DozeHost host, @Main Handler handler,
|
||||
DozeParameters params, KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
DozeLog dozeLog) {
|
||||
DozeLog dozeLog, TunerService tunerService) {
|
||||
mContext = context;
|
||||
mWakeLock = wakeLock;
|
||||
mHost = host;
|
||||
@@ -83,6 +85,8 @@ public class DozeUi implements DozeMachine.Part {
|
||||
mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", handler);
|
||||
keyguardUpdateMonitor.registerCallback(mKeyguardVisibilityCallback);
|
||||
mDozeLog = dozeLog;
|
||||
|
||||
tunerService.addTunable(this, Settings.Secure.DOZE_ALWAYS_ON);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -238,4 +242,11 @@ public class DozeUi implements DozeMachine.Part {
|
||||
KeyguardUpdateMonitorCallback getKeyguardCallback() {
|
||||
return mKeyguardVisibilityCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTuningChanged(String key, String newValue) {
|
||||
if (key.equals(Settings.Secure.DOZE_ALWAYS_ON)) {
|
||||
updateAnimateScreenOff();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2395,6 +2395,9 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
|
||||
return;
|
||||
}
|
||||
mDozing = dozing;
|
||||
if (!dozing) {
|
||||
mAnimatingScreenOff = false;
|
||||
}
|
||||
setShowingLocked(mShowing);
|
||||
}
|
||||
|
||||
@@ -2404,7 +2407,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
|
||||
// is 1f), then show the activity lock screen.
|
||||
if (mAnimatingScreenOff && mDozing && linear == 1f) {
|
||||
mAnimatingScreenOff = false;
|
||||
setShowingLocked(mShowing);
|
||||
setShowingLocked(mShowing, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -264,6 +264,20 @@ class NotificationWakeUpCoordinator @Inject constructor(
|
||||
}
|
||||
|
||||
override fun onStateChanged(newState: Int) {
|
||||
if (dozeParameters.shouldControlUnlockedScreenOff()) {
|
||||
if (animatingScreenOff &&
|
||||
state == StatusBarState.KEYGUARD &&
|
||||
newState == StatusBarState.SHADE) {
|
||||
// If we're animating the screen off and going from KEYGUARD back to SHADE, the
|
||||
// animation was cancelled and we are unlocking. Override the doze amount to 0f (not
|
||||
// dozing) so that the notifications are no longer hidden.
|
||||
setDozeAmount(0f, 0f)
|
||||
}
|
||||
|
||||
animatingScreenOff =
|
||||
state == StatusBarState.SHADE && newState == StatusBarState.KEYGUARD
|
||||
}
|
||||
|
||||
overrideDozeAmountIfBypass()
|
||||
if (bypassController.bypassEnabled &&
|
||||
newState == StatusBarState.KEYGUARD && state == StatusBarState.SHADE_LOCKED &&
|
||||
@@ -273,13 +287,6 @@ class NotificationWakeUpCoordinator @Inject constructor(
|
||||
setNotificationsVisible(visible = false, increaseSpeed = false, animate = true)
|
||||
}
|
||||
|
||||
// If we want to control the screen off animation, check whether we are going from SHADE to
|
||||
// KEYGUARD.
|
||||
if (dozeParameters.shouldControlUnlockedScreenOff()) {
|
||||
animatingScreenOff =
|
||||
state == StatusBarState.SHADE && newState == StatusBarState.KEYGUARD
|
||||
}
|
||||
|
||||
this.state = newState
|
||||
}
|
||||
|
||||
@@ -386,8 +393,6 @@ class NotificationWakeUpCoordinator @Inject constructor(
|
||||
override fun onDozingChanged(isDozing: Boolean) {
|
||||
if (isDozing) {
|
||||
setNotificationsVisible(visible = false, animate = false, increaseSpeed = false)
|
||||
} else {
|
||||
animatingScreenOff = false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ import androidx.test.runner.AndroidJUnit4;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.util.wakelock.WakeLockFake;
|
||||
|
||||
import org.junit.After;
|
||||
@@ -67,6 +68,8 @@ public class DozeUiTest extends SysuiTestCase {
|
||||
private DozeHost mHost;
|
||||
@Mock
|
||||
private DozeLog mDozeLog;
|
||||
@Mock
|
||||
private TunerService mTunerService;
|
||||
private WakeLockFake mWakeLock;
|
||||
private Handler mHandler;
|
||||
private HandlerThread mHandlerThread;
|
||||
@@ -82,7 +85,7 @@ public class DozeUiTest extends SysuiTestCase {
|
||||
mHandler = mHandlerThread.getThreadHandler();
|
||||
|
||||
mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler,
|
||||
mDozeParameters, mKeyguardUpdateMonitor, mDozeLog);
|
||||
mDozeParameters, mKeyguardUpdateMonitor, mDozeLog, mTunerService);
|
||||
mDozeUi.setDozeMachine(mMachine);
|
||||
}
|
||||
|
||||
@@ -138,7 +141,7 @@ public class DozeUiTest extends SysuiTestCase {
|
||||
reset(mHost);
|
||||
when(mDozeParameters.getDisplayNeedsBlanking()).thenReturn(true);
|
||||
mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler,
|
||||
mDozeParameters, mKeyguardUpdateMonitor, mDozeLog);
|
||||
mDozeParameters, mKeyguardUpdateMonitor, mDozeLog, mTunerService);
|
||||
mDozeUi.setDozeMachine(mMachine);
|
||||
|
||||
// Never animate if display doesn't support it.
|
||||
|
||||
Reference in New Issue
Block a user