Update animateScreenOff when AOD preferences change.

Some parts of the Doze/AOD code were out of sync after a settings change, which caused issues during the first unlock after a settings change.

Fixes: 179947580
Test: atest SystemUITests
Test: turn AOD off and then on, then lock the phone, receive a call, note that the incoming call screen appears instead of a blank screen
Change-Id: Ib998a99bc9ca0e810631ba4cba0c9bf6119aae72
This commit is contained in:
Josh Tsuji
2021-02-17 16:03:58 -05:00
parent f4eb0eddad
commit d000396e2e
2 changed files with 18 additions and 4 deletions

View File

@@ -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();
}
}
}

View File

@@ -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.