Loading packages/SystemUI/src/com/android/systemui/doze/DozeUi.java +17 −9 Original line number Diff line number Diff line Loading @@ -26,9 +26,9 @@ import android.os.SystemClock; import android.text.format.Formatter; import android.util.Log; import com.android.systemui.DejankUtils; import com.android.systemui.dagger.qualifiers.Main; 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.util.AlarmTimeout; import com.android.systemui.util.wakelock.WakeLock; Loading @@ -52,15 +52,21 @@ public class DozeUi implements DozeMachine.Part { private final boolean mCanAnimateTransition; private final DozeParameters mDozeParameters; private final DozeLog mDozeLog; private final StatusBarStateController mStatusBarStateController; private long mLastTimeTickElapsed = 0; // If time tick is scheduled and there's not a pending runnable to cancel: private boolean mTimeTickScheduled; private final Runnable mCancelTimeTickerRunnable = new Runnable() { @Override public void run() { mTimeTicker.cancel(); } }; @Inject public DozeUi(Context context, AlarmManager alarmManager, WakeLock wakeLock, DozeHost host, @Main Handler handler, DozeParameters params, StatusBarStateController statusBarStateController, DozeLog dozeLog) { mContext = context; mWakeLock = wakeLock; Loading @@ -70,7 +76,6 @@ public class DozeUi implements DozeMachine.Part { mDozeParameters = params; mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", handler); mDozeLog = dozeLog; mStatusBarStateController = statusBarStateController; } @Override Loading Loading @@ -157,13 +162,15 @@ public class DozeUi implements DozeMachine.Part { } private void scheduleTimeTick() { if (mTimeTicker.isScheduled()) { if (mTimeTickScheduled) { return; } mTimeTickScheduled = true; DejankUtils.removeCallbacks(mCancelTimeTickerRunnable); long time = System.currentTimeMillis(); long delta = roundToNextMinute(time) - System.currentTimeMillis(); boolean scheduled = mTimeTicker.schedule(delta, AlarmTimeout.MODE_IGNORE_IF_SCHEDULED); boolean scheduled = mTimeTicker.schedule(delta, AlarmTimeout.MODE_RESCHEDULE_IF_SCHEDULED); if (scheduled) { mDozeLog.traceTimeTickScheduled(time, time + delta); } Loading @@ -171,11 +178,11 @@ public class DozeUi implements DozeMachine.Part { } private void unscheduleTimeTick() { if (!mTimeTicker.isScheduled()) { if (!mTimeTickScheduled) { return; } verifyLastTimeTick(); mTimeTicker.cancel(); mTimeTickScheduled = false; DejankUtils.postAfterTraversal(mCancelTimeTickerRunnable); } private void verifyLastTimeTick() { Loading Loading @@ -205,6 +212,7 @@ public class DozeUi implements DozeMachine.Part { // Keep wakelock until a frame has been pushed. mHandler.post(mWakeLock.wrap(() -> {})); mTimeTickScheduled = false; scheduleTimeTick(); } } packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java +7 −10 Original line number Diff line number Diff line Loading @@ -33,15 +33,14 @@ import static org.mockito.Mockito.when; import android.app.AlarmManager; import android.os.Handler; import android.os.HandlerThread; import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.DejankUtils; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.tuner.TunerService; import com.android.systemui.util.wakelock.WakeLockFake; import org.junit.After; Loading @@ -53,6 +52,7 @@ import org.mockito.MockitoAnnotations; @RunWith(AndroidJUnit4.class) @SmallTest @TestableLooper.RunWithLooper public class DozeUiTest extends SysuiTestCase { @Mock Loading @@ -62,23 +62,19 @@ public class DozeUiTest extends SysuiTestCase { @Mock private DozeParameters mDozeParameters; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private DozeHost mHost; @Mock private DozeLog mDozeLog; @Mock private TunerService mTunerService; private WakeLockFake mWakeLock; private Handler mHandler; private HandlerThread mHandlerThread; private DozeUi mDozeUi; @Mock private StatusBarStateController mStatusBarStateController; @Before public void setUp() throws Exception { allowTestableLooperAsMainThread(); MockitoAnnotations.initMocks(this); DejankUtils.setImmediate(true); mHandlerThread = new HandlerThread("DozeUiTest"); mHandlerThread.start(); Loading @@ -86,12 +82,13 @@ public class DozeUiTest extends SysuiTestCase { mHandler = mHandlerThread.getThreadHandler(); mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler, mDozeParameters, mStatusBarStateController, mDozeLog); mDozeParameters, mDozeLog); mDozeUi.setDozeMachine(mMachine); } @After public void tearDown() throws Exception { DejankUtils.setImmediate(false); mHandlerThread.quit(); mHandler = null; mHandlerThread = null; Loading Loading
packages/SystemUI/src/com/android/systemui/doze/DozeUi.java +17 −9 Original line number Diff line number Diff line Loading @@ -26,9 +26,9 @@ import android.os.SystemClock; import android.text.format.Formatter; import android.util.Log; import com.android.systemui.DejankUtils; import com.android.systemui.dagger.qualifiers.Main; 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.util.AlarmTimeout; import com.android.systemui.util.wakelock.WakeLock; Loading @@ -52,15 +52,21 @@ public class DozeUi implements DozeMachine.Part { private final boolean mCanAnimateTransition; private final DozeParameters mDozeParameters; private final DozeLog mDozeLog; private final StatusBarStateController mStatusBarStateController; private long mLastTimeTickElapsed = 0; // If time tick is scheduled and there's not a pending runnable to cancel: private boolean mTimeTickScheduled; private final Runnable mCancelTimeTickerRunnable = new Runnable() { @Override public void run() { mTimeTicker.cancel(); } }; @Inject public DozeUi(Context context, AlarmManager alarmManager, WakeLock wakeLock, DozeHost host, @Main Handler handler, DozeParameters params, StatusBarStateController statusBarStateController, DozeLog dozeLog) { mContext = context; mWakeLock = wakeLock; Loading @@ -70,7 +76,6 @@ public class DozeUi implements DozeMachine.Part { mDozeParameters = params; mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", handler); mDozeLog = dozeLog; mStatusBarStateController = statusBarStateController; } @Override Loading Loading @@ -157,13 +162,15 @@ public class DozeUi implements DozeMachine.Part { } private void scheduleTimeTick() { if (mTimeTicker.isScheduled()) { if (mTimeTickScheduled) { return; } mTimeTickScheduled = true; DejankUtils.removeCallbacks(mCancelTimeTickerRunnable); long time = System.currentTimeMillis(); long delta = roundToNextMinute(time) - System.currentTimeMillis(); boolean scheduled = mTimeTicker.schedule(delta, AlarmTimeout.MODE_IGNORE_IF_SCHEDULED); boolean scheduled = mTimeTicker.schedule(delta, AlarmTimeout.MODE_RESCHEDULE_IF_SCHEDULED); if (scheduled) { mDozeLog.traceTimeTickScheduled(time, time + delta); } Loading @@ -171,11 +178,11 @@ public class DozeUi implements DozeMachine.Part { } private void unscheduleTimeTick() { if (!mTimeTicker.isScheduled()) { if (!mTimeTickScheduled) { return; } verifyLastTimeTick(); mTimeTicker.cancel(); mTimeTickScheduled = false; DejankUtils.postAfterTraversal(mCancelTimeTickerRunnable); } private void verifyLastTimeTick() { Loading Loading @@ -205,6 +212,7 @@ public class DozeUi implements DozeMachine.Part { // Keep wakelock until a frame has been pushed. mHandler.post(mWakeLock.wrap(() -> {})); mTimeTickScheduled = false; scheduleTimeTick(); } }
packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java +7 −10 Original line number Diff line number Diff line Loading @@ -33,15 +33,14 @@ import static org.mockito.Mockito.when; import android.app.AlarmManager; import android.os.Handler; import android.os.HandlerThread; import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.DejankUtils; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.tuner.TunerService; import com.android.systemui.util.wakelock.WakeLockFake; import org.junit.After; Loading @@ -53,6 +52,7 @@ import org.mockito.MockitoAnnotations; @RunWith(AndroidJUnit4.class) @SmallTest @TestableLooper.RunWithLooper public class DozeUiTest extends SysuiTestCase { @Mock Loading @@ -62,23 +62,19 @@ public class DozeUiTest extends SysuiTestCase { @Mock private DozeParameters mDozeParameters; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private DozeHost mHost; @Mock private DozeLog mDozeLog; @Mock private TunerService mTunerService; private WakeLockFake mWakeLock; private Handler mHandler; private HandlerThread mHandlerThread; private DozeUi mDozeUi; @Mock private StatusBarStateController mStatusBarStateController; @Before public void setUp() throws Exception { allowTestableLooperAsMainThread(); MockitoAnnotations.initMocks(this); DejankUtils.setImmediate(true); mHandlerThread = new HandlerThread("DozeUiTest"); mHandlerThread.start(); Loading @@ -86,12 +82,13 @@ public class DozeUiTest extends SysuiTestCase { mHandler = mHandlerThread.getThreadHandler(); mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler, mDozeParameters, mStatusBarStateController, mDozeLog); mDozeParameters, mDozeLog); mDozeUi.setDozeMachine(mMachine); } @After public void tearDown() throws Exception { DejankUtils.setImmediate(false); mHandlerThread.quit(); mHandler = null; mHandlerThread = null; Loading