Use KeyguardUpdateMonitor in DreamCondition.
This changelist moves DreamCondition away from using dream broadcasts for dream state updates to instead KeyguardUpdateMonitor. This move coincides with updates to improve the latency of dream state updates to KeyguardUpdateMonitor. Test: atest DreamConditionTest Fixes: 275108597 Change-Id: Idd362f882a822d3e670eb08e424a5ac145cb9479
This commit is contained in:
@@ -16,12 +16,9 @@
|
||||
package com.android.systemui.dreams.conditions;
|
||||
|
||||
import android.app.DreamManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.systemui.shared.condition.Condition;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -30,48 +27,33 @@ import javax.inject.Inject;
|
||||
* {@link DreamCondition} provides a signal when a dream begins and ends.
|
||||
*/
|
||||
public class DreamCondition extends Condition {
|
||||
private final Context mContext;
|
||||
private final DreamManager mDreamManager;
|
||||
|
||||
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
processIntent(intent);
|
||||
}
|
||||
};
|
||||
private final KeyguardUpdateMonitor mUpdateMonitor;
|
||||
|
||||
|
||||
private final KeyguardUpdateMonitorCallback mUpdateCallback =
|
||||
new KeyguardUpdateMonitorCallback() {
|
||||
@Override
|
||||
public void onDreamingStateChanged(boolean dreaming) {
|
||||
updateCondition(dreaming);
|
||||
}
|
||||
};
|
||||
|
||||
@Inject
|
||||
public DreamCondition(Context context,
|
||||
DreamManager dreamManager) {
|
||||
mContext = context;
|
||||
public DreamCondition(DreamManager dreamManager, KeyguardUpdateMonitor monitor) {
|
||||
mDreamManager = dreamManager;
|
||||
}
|
||||
|
||||
private void processIntent(Intent intent) {
|
||||
// In the case of a non-existent sticky broadcast, ignore when there is no intent.
|
||||
if (intent == null) {
|
||||
return;
|
||||
}
|
||||
if (TextUtils.equals(intent.getAction(), Intent.ACTION_DREAMING_STARTED)) {
|
||||
updateCondition(true);
|
||||
} else if (TextUtils.equals(intent.getAction(), Intent.ACTION_DREAMING_STOPPED)) {
|
||||
updateCondition(false);
|
||||
} else {
|
||||
throw new IllegalStateException("unexpected intent:" + intent);
|
||||
}
|
||||
mUpdateMonitor = monitor;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void start() {
|
||||
final IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(Intent.ACTION_DREAMING_STARTED);
|
||||
filter.addAction(Intent.ACTION_DREAMING_STOPPED);
|
||||
mContext.registerReceiver(mReceiver, filter);
|
||||
mUpdateMonitor.registerCallback(mUpdateCallback);
|
||||
updateCondition(mDreamManager.isDreaming());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void stop() {
|
||||
mContext.unregisterReceiver(mReceiver);
|
||||
mUpdateMonitor.removeCallback(mUpdateCallback);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.android.systemui.dreams.conditions;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.clearInvocations;
|
||||
import static org.mockito.Mockito.never;
|
||||
@@ -26,13 +25,13 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.DreamManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.shared.condition.Condition;
|
||||
|
||||
@@ -55,6 +54,9 @@ public class DreamConditionTest extends SysuiTestCase {
|
||||
@Mock
|
||||
DreamManager mDreamManager;
|
||||
|
||||
@Mock
|
||||
KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
@@ -66,7 +68,7 @@ public class DreamConditionTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testInitialDreamingState() {
|
||||
when(mDreamManager.isDreaming()).thenReturn(true);
|
||||
final DreamCondition condition = new DreamCondition(mContext, mDreamManager);
|
||||
final DreamCondition condition = new DreamCondition(mDreamManager, mKeyguardUpdateMonitor);
|
||||
condition.addCallback(mCallback);
|
||||
|
||||
verify(mCallback).onConditionChanged(eq(condition));
|
||||
@@ -79,7 +81,7 @@ public class DreamConditionTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testInitialNonDreamingState() {
|
||||
when(mDreamManager.isDreaming()).thenReturn(false);
|
||||
final DreamCondition condition = new DreamCondition(mContext, mDreamManager);
|
||||
final DreamCondition condition = new DreamCondition(mDreamManager, mKeyguardUpdateMonitor);
|
||||
condition.addCallback(mCallback);
|
||||
|
||||
verify(mCallback, never()).onConditionChanged(eq(condition));
|
||||
@@ -91,15 +93,21 @@ public class DreamConditionTest extends SysuiTestCase {
|
||||
*/
|
||||
@Test
|
||||
public void testChange() {
|
||||
final ArgumentCaptor<BroadcastReceiver> receiverCaptor =
|
||||
ArgumentCaptor.forClass(BroadcastReceiver.class);
|
||||
final ArgumentCaptor<KeyguardUpdateMonitorCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(KeyguardUpdateMonitorCallback.class);
|
||||
when(mDreamManager.isDreaming()).thenReturn(true);
|
||||
final DreamCondition condition = new DreamCondition(mContext, mDreamManager);
|
||||
final DreamCondition condition = new DreamCondition(mDreamManager, mKeyguardUpdateMonitor);
|
||||
condition.addCallback(mCallback);
|
||||
verify(mContext).registerReceiver(receiverCaptor.capture(), any());
|
||||
verify(mKeyguardUpdateMonitor).registerCallback(callbackCaptor.capture());
|
||||
|
||||
clearInvocations(mCallback);
|
||||
receiverCaptor.getValue().onReceive(mContext, new Intent(Intent.ACTION_DREAMING_STOPPED));
|
||||
callbackCaptor.getValue().onDreamingStateChanged(false);
|
||||
verify(mCallback).onConditionChanged(eq(condition));
|
||||
assertThat(condition.isConditionMet()).isFalse();
|
||||
|
||||
clearInvocations(mCallback);
|
||||
callbackCaptor.getValue().onDreamingStateChanged(true);
|
||||
verify(mCallback).onConditionChanged(eq(condition));
|
||||
assertThat(condition.isConditionMet()).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user