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