Merge "Disable lift-to-wake when always-on is checked"

This commit is contained in:
TreeHugger Robot
2017-07-12 19:34:54 +00:00
committed by Android (Google) Code Review
7 changed files with 56 additions and 6 deletions

View File

@@ -36,11 +36,17 @@ public class AmbientDisplayAlwaysOnPreferenceController extends
private static final int MY_USER = UserHandle.myUserId(); private static final int MY_USER = UserHandle.myUserId();
private final AmbientDisplayConfiguration mConfig; private final AmbientDisplayConfiguration mConfig;
private final OnPreferenceChangedCallback mCallback;
public interface OnPreferenceChangedCallback {
void onPreferenceChanged();
}
public AmbientDisplayAlwaysOnPreferenceController(Context context, public AmbientDisplayAlwaysOnPreferenceController(Context context,
AmbientDisplayConfiguration config) { AmbientDisplayConfiguration config, OnPreferenceChangedCallback callback) {
super(context); super(context);
mConfig = config; mConfig = config;
mCallback = callback;
} }
@Override @Override
@@ -57,6 +63,9 @@ public class AmbientDisplayAlwaysOnPreferenceController extends
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
int enabled = (boolean) newValue ? 1 : 0; int enabled = (boolean) newValue ? 1 : 0;
Settings.Secure.putInt(mContext.getContentResolver(), DOZE_ALWAYS_ON, enabled); Settings.Secure.putInt(mContext.getContentResolver(), DOZE_ALWAYS_ON, enabled);
if (mCallback != null) {
mCallback.onPreferenceChanged();
}
return true; return true;
} }

View File

@@ -50,11 +50,13 @@ public class AmbientDisplaySettings extends DashboardFragment {
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Lifecycle lifecycle, AmbientDisplayConfiguration config, Lifecycle lifecycle, AmbientDisplayConfiguration config,
MetricsFeatureProvider metricsFeatureProvider) { MetricsFeatureProvider metricsFeatureProvider,
AmbientDisplayAlwaysOnPreferenceController.OnPreferenceChangedCallback aodCallback) {
final List<AbstractPreferenceController> controllers = new ArrayList<>(); final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new AmbientDisplayNotificationsPreferenceController(context, config, controllers.add(new AmbientDisplayNotificationsPreferenceController(context, config,
metricsFeatureProvider)); metricsFeatureProvider));
controllers.add(new AmbientDisplayAlwaysOnPreferenceController(context, config)); controllers.add(new AmbientDisplayAlwaysOnPreferenceController(context, config,
aodCallback));
controllers.add(new DoubleTapScreenPreferenceController(context, lifecycle, config, controllers.add(new DoubleTapScreenPreferenceController(context, lifecycle, config,
MY_USER_ID, KEY_AMBIENT_DISPLAY_DOUBLE_TAP)); MY_USER_ID, KEY_AMBIENT_DISPLAY_DOUBLE_TAP));
controllers.add(new PickupGesturePreferenceController(context, lifecycle, config, controllers.add(new PickupGesturePreferenceController(context, lifecycle, config,
@@ -76,7 +78,8 @@ public class AmbientDisplaySettings extends DashboardFragment {
@Override @Override
protected List<AbstractPreferenceController> getPreferenceControllers(Context context) { protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
return buildPreferenceControllers(context, getLifecycle(), return buildPreferenceControllers(context, getLifecycle(),
new AmbientDisplayConfiguration(context), mMetricsFeatureProvider); new AmbientDisplayConfiguration(context), mMetricsFeatureProvider,
() -> { updatePreferenceStates(); });
} }
@Override @Override
@@ -100,7 +103,7 @@ public class AmbientDisplaySettings extends DashboardFragment {
@Override @Override
public List<AbstractPreferenceController> getPreferenceControllers(Context context) { public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
return buildPreferenceControllers(context, null, return buildPreferenceControllers(context, null,
new AmbientDisplayConfiguration(context), null); new AmbientDisplayConfiguration(context), null, null);
} }
}; };
} }

View File

@@ -71,6 +71,8 @@ public abstract class GesturePreferenceController extends AbstractPreferenceCont
? R.string.gesture_setting_on ? R.string.gesture_setting_on
: R.string.gesture_setting_off); : R.string.gesture_setting_off);
} }
// Different meanings of "Enabled" for the Preference and Controller.
preference.setEnabled(canHandleClicks());
} }
} }
@@ -106,4 +108,8 @@ public abstract class GesturePreferenceController extends AbstractPreferenceCont
protected abstract String getVideoPrefKey(); protected abstract String getVideoPrefKey();
protected abstract boolean isSwitchPrefEnabled(); protected abstract boolean isSwitchPrefEnabled();
protected boolean canHandleClicks() {
return true;
}
} }

View File

@@ -76,4 +76,9 @@ public class PickupGesturePreferenceController extends GesturePreferenceControll
Settings.Secure.DOZE_PULSE_ON_PICK_UP, enabled ? 1 : 0); Settings.Secure.DOZE_PULSE_ON_PICK_UP, enabled ? 1 : 0);
return true; return true;
} }
@Override
public boolean canHandleClicks() {
return mAmbientConfig.pulseOnPickupCanBeModified(mUserId);
}
} }

View File

@@ -34,6 +34,10 @@ public class AmbientDisplayConfiguration {
return true; return true;
} }
public boolean pulseOnPickupCanBeModified(int user) {
return true;
}
public boolean pulseOnDoubleTapAvailable() { public boolean pulseOnDoubleTapAvailable() {
return true; return true;
} }

View File

@@ -48,11 +48,13 @@ public class AmbientDisplayAlwaysOnPreferenceControllerTest {
@Mock SwitchPreference mSwitchPreference; @Mock SwitchPreference mSwitchPreference;
AmbientDisplayAlwaysOnPreferenceController mController; AmbientDisplayAlwaysOnPreferenceController mController;
boolean mCallbackInvoked;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mController = new AmbientDisplayAlwaysOnPreferenceController(mContext, mConfig); mController = new AmbientDisplayAlwaysOnPreferenceController(mContext, mConfig,
() -> { mCallbackInvoked = true; });
} }
@Test @Test
@@ -75,6 +77,13 @@ public class AmbientDisplayAlwaysOnPreferenceControllerTest {
verify(mSwitchPreference).setChecked(false); verify(mSwitchPreference).setChecked(false);
} }
@Test
public void onPreferenceChange_callback() throws Exception {
assertThat(mCallbackInvoked).isFalse();
mController.onPreferenceChange(mSwitchPreference, true);
assertThat(mCallbackInvoked).isTrue();
}
@Test @Test
public void onPreferenceChange_enable() throws Exception { public void onPreferenceChange_enable() throws Exception {
mController.onPreferenceChange(mSwitchPreference, true); mController.onPreferenceChange(mSwitchPreference, true);

View File

@@ -83,4 +83,18 @@ public class PIckupGesturePreferenceControllerTest {
assertThat(mController.isSwitchPrefEnabled()).isFalse(); assertThat(mController.isSwitchPrefEnabled()).isFalse();
} }
@Test
public void testCanHandleClicks_configIsSet_shouldReturnTrue() {
when(mAmbientDisplayConfiguration.pulseOnPickupCanBeModified(anyInt())).thenReturn(true);
assertThat(mController.canHandleClicks()).isTrue();
}
@Test
public void testCanHandleClicks_configIsNotSet_shouldReturnFalse() {
when(mAmbientDisplayConfiguration.pulseOnPickupCanBeModified(anyInt())).thenReturn(false);
assertThat(mController.canHandleClicks()).isFalse();
}
} }