Merge "Fix SysUI / AoD leaking content observers" into qt-dev
This commit is contained in:
@@ -70,11 +70,12 @@ public class DozeSensors {
|
||||
private final Consumer<Boolean> mProxCallback;
|
||||
private final Callback mCallback;
|
||||
@VisibleForTesting
|
||||
protected final TriggerSensor[] mSensors;
|
||||
protected TriggerSensor[] mSensors;
|
||||
|
||||
private final Handler mHandler = new Handler();
|
||||
private final ProxSensor mProxSensor;
|
||||
private long mDebounceFrom;
|
||||
private boolean mSettingRegistered;
|
||||
|
||||
public DozeSensors(Context context, AlarmManager alarmManager, SensorManager sensorManager,
|
||||
DozeParameters dozeParameters, AmbientDisplayConfiguration config, WakeLock wakeLock,
|
||||
@@ -172,13 +173,8 @@ public class DozeSensors {
|
||||
public void setListening(boolean listen) {
|
||||
for (TriggerSensor s : mSensors) {
|
||||
s.setListening(listen);
|
||||
if (listen) {
|
||||
s.registerSettingsObserver(mSettingsObserver);
|
||||
}
|
||||
}
|
||||
if (!listen) {
|
||||
mResolver.unregisterContentObserver(mSettingsObserver);
|
||||
}
|
||||
registerSettingsObserverIfNeeded(listen);
|
||||
}
|
||||
|
||||
/** Set the listening state of only the sensors that require the touchscreen. */
|
||||
@@ -240,6 +236,17 @@ public class DozeSensors {
|
||||
return mProxSensor.mCurrentlyFar;
|
||||
}
|
||||
|
||||
private void registerSettingsObserverIfNeeded(boolean register) {
|
||||
if (!register) {
|
||||
mResolver.unregisterContentObserver(mSettingsObserver);
|
||||
} else if (!mSettingRegistered) {
|
||||
for (TriggerSensor s : mSensors) {
|
||||
s.registerSettingsObserver(mSettingsObserver);
|
||||
}
|
||||
}
|
||||
mSettingRegistered = register;
|
||||
}
|
||||
|
||||
private class ProxSensor implements SensorEventListener {
|
||||
|
||||
boolean mRequested;
|
||||
|
||||
@@ -27,10 +27,12 @@ import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.AlarmManager;
|
||||
import android.database.ContentObserver;
|
||||
import android.hardware.display.AmbientDisplayConfiguration;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
@@ -39,6 +41,7 @@ import android.testing.TestableLooper.RunWithLooper;
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.doze.DozeSensors.TriggerSensor;
|
||||
import com.android.systemui.plugins.SensorManagerPlugin;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
import com.android.systemui.util.AsyncSensorManager;
|
||||
@@ -73,6 +76,8 @@ public class DozeSensorsTest extends SysuiTestCase {
|
||||
private Consumer<Boolean> mProxCallback;
|
||||
@Mock
|
||||
private AlwaysOnDisplayPolicy mAlwaysOnDisplayPolicy;
|
||||
@Mock
|
||||
private TriggerSensor mMockTriggerSensor;
|
||||
private SensorManagerPlugin.SensorEventListener mWakeLockScreenListener;
|
||||
private TestableLooper mTestableLooper;
|
||||
private DozeSensors mDozeSensors;
|
||||
@@ -107,6 +112,25 @@ public class DozeSensorsTest extends SysuiTestCase {
|
||||
anyBoolean(), anyFloat(), anyFloat(), eq(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetListening_firstTrue_registerSettingsObserver() {
|
||||
mDozeSensors.mSensors = new TriggerSensor[] {mMockTriggerSensor};
|
||||
|
||||
mDozeSensors.setListening(true);
|
||||
|
||||
verify(mMockTriggerSensor).registerSettingsObserver(any(ContentObserver.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetListening_twiceTrue_onlyRegisterSettingsObserverOnce() {
|
||||
mDozeSensors.mSensors = new TriggerSensor[] {mMockTriggerSensor};
|
||||
mDozeSensors.setListening(true);
|
||||
|
||||
mDozeSensors.setListening(true);
|
||||
|
||||
verify(mMockTriggerSensor, times(1)).registerSettingsObserver(any(ContentObserver.class));
|
||||
}
|
||||
|
||||
private class TestableDozeSensors extends DozeSensors {
|
||||
|
||||
TestableDozeSensors() {
|
||||
|
||||
Reference in New Issue
Block a user