Split Ambient Display settings.
1. Reverting the changes for Display->Ambient Display; this setting will control incoming notification pulse. 2. Added 2 separate entries in gestures settings to control pick up and double tap gestures-triggered pulsing for Ambient Display. 3. Added automated tests to verify the preference initializes to the correct default value, and also verify that toggling the preference updates the corresponding settings correctly. Test: make SettingsTests Bug: 30595437 Change-Id: I125bf75fc4ccfea126a00ffae4207fcb789f487a
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.android.settings.gesture;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.provider.Settings.Secure;
|
||||
import android.support.test.filters.MediumTest;
|
||||
import android.support.test.uiautomator.UiDevice;
|
||||
import android.support.test.uiautomator.UiObject;
|
||||
import android.support.test.uiautomator.UiSelector;
|
||||
import android.support.test.uiautomator.UiScrollable;
|
||||
import android.test.InstrumentationTestCase;
|
||||
import android.util.Log;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.Switch;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Test for Gesture preferences.
|
||||
*/
|
||||
@MediumTest
|
||||
public class GestureSettingsTest extends InstrumentationTestCase {
|
||||
|
||||
private static final String TAG = "GestureSettingsTest";
|
||||
|
||||
private UiDevice mDevice;
|
||||
private Context mTargetContext;
|
||||
private String mTargetPackage;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
mDevice = UiDevice.getInstance(getInstrumentation());
|
||||
mTargetContext = getInstrumentation().getTargetContext();
|
||||
mTargetPackage = mTargetContext.getPackageName();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAmbientDisplaySwitchPreference() throws Exception {
|
||||
launchSettings();
|
||||
UiObject dozeSwitch = getDozeSwitch();
|
||||
assertNotNull(dozeSwitch);
|
||||
assertTrue(dozeSwitch.exists());
|
||||
assertToggleStateMatchesSettingValue(dozeSwitch, Secure.DOZE_ENABLED, 1, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGestureSettingsExists() throws Exception {
|
||||
launchMoves();
|
||||
UiObject titleObj = mDevice.findObject(new UiSelector().text(
|
||||
mTargetContext.getResources().getString(R.string.gesture_preference_title)));
|
||||
assertNotNull(titleObj);
|
||||
assertTrue(titleObj.exists());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCameraDoubleTapToggle() throws Exception {
|
||||
assertSwitchToggle(mTargetContext.getResources().getString(
|
||||
R.string.double_tap_power_for_camera_title),
|
||||
Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 0, 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCameraDoubleTwistToggle() throws Exception {
|
||||
assertSwitchToggle(mTargetContext.getResources().getString(
|
||||
R.string.double_twist_for_camera_mode_title),
|
||||
Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 1, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFingerprintSwipeToggle() throws Exception {
|
||||
assertSwitchToggle(mTargetContext.getResources().getString(
|
||||
R.string.fingerprint_swipe_for_notifications_title),
|
||||
Secure.SYSTEM_NAVIGATION_KEYS_ENABLED, 0, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDozeDoubleTapToggle() throws Exception {
|
||||
assertSwitchToggle(mTargetContext.getResources().getString(
|
||||
R.string.ambient_display_title),
|
||||
Secure.DOZE_PULSE_ON_DOUBLE_TAP, 1, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDozePickupToggle() throws Exception {
|
||||
assertSwitchToggle(mTargetContext.getResources().getString(
|
||||
R.string.ambient_display_pickup_title),
|
||||
Secure.DOZE_PULSE_ON_PICK_UP, 1, 1);
|
||||
}
|
||||
|
||||
private void launchSettings() {
|
||||
Intent settingsIntent = new Intent(Intent.ACTION_MAIN)
|
||||
.addCategory(Intent.CATEGORY_LAUNCHER)
|
||||
.setPackage(mTargetPackage)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
getInstrumentation().getContext().startActivity(settingsIntent);
|
||||
}
|
||||
|
||||
private void launchMoves() throws Exception {
|
||||
launchSettings();
|
||||
UiScrollable settings = new UiScrollable(
|
||||
new UiSelector().packageName(mTargetPackage).scrollable(true));
|
||||
String titleMoves =
|
||||
mTargetContext.getResources().getString(R.string.gesture_preference_title);
|
||||
settings.scrollTextIntoView(titleMoves);
|
||||
mDevice.findObject(new UiSelector().text(titleMoves)).click();
|
||||
}
|
||||
|
||||
private void navigateToMovesSetting(String title) throws Exception {
|
||||
launchMoves();
|
||||
UiScrollable moves = new UiScrollable(
|
||||
new UiSelector().packageName(mTargetPackage).scrollable(true));
|
||||
moves.scrollTextIntoView(title);
|
||||
}
|
||||
|
||||
private UiScrollable navigateToAmbientDisplay() throws Exception {
|
||||
UiScrollable settings = new UiScrollable(
|
||||
new UiSelector().packageName(mTargetPackage).scrollable(true));
|
||||
String titleDisplay =
|
||||
mTargetContext.getResources().getString(R.string.display_settings_title);
|
||||
settings.scrollTextIntoView(titleDisplay);
|
||||
mDevice.findObject(new UiSelector().text(titleDisplay)).click();
|
||||
settings.scrollTextIntoView(mTargetContext.getResources().getString(R.string.doze_title));
|
||||
return settings;
|
||||
}
|
||||
|
||||
private UiObject getGestureSwitch(String title) throws Exception {
|
||||
UiObject titleView = mDevice.findObject(new UiSelector().text(title));
|
||||
UiObject gestureSwitch =
|
||||
titleView.getFromParent(new UiSelector().className(Switch.class.getName()));
|
||||
assertNotNull(gestureSwitch);
|
||||
assertTrue(gestureSwitch.exists());
|
||||
return gestureSwitch;
|
||||
}
|
||||
|
||||
private UiObject getDozeSwitch() throws Exception {
|
||||
UiScrollable settings = navigateToAmbientDisplay();
|
||||
UiObject dozeSwitch = null;
|
||||
UiSelector relativeLayoutSelector =
|
||||
new UiSelector().className(RelativeLayout.class.getName());
|
||||
String titleDoze = mTargetContext.getResources().getString(R.string.doze_title);
|
||||
for (int i = 0; i <= settings.getChildCount(relativeLayoutSelector); i++) {
|
||||
UiObject relativeLayout = settings.getChild(relativeLayoutSelector.instance(i));
|
||||
if (relativeLayout.getChildCount() != 2) {
|
||||
continue;
|
||||
}
|
||||
UiObject obj1 = relativeLayout.getChild(new UiSelector().index(0));
|
||||
if (obj1.getText() == titleDoze) {
|
||||
return relativeLayout.getFromParent(
|
||||
new UiSelector().className(Switch.class.getName()));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void assertSwitchToggle(String title, String key, int defaultVal, int enabledVal)
|
||||
throws Exception {
|
||||
navigateToMovesSetting(title);
|
||||
assertToggleStateMatchesSettingValue(getGestureSwitch(title), key, defaultVal, enabledVal);
|
||||
}
|
||||
|
||||
private void assertToggleStateMatchesSettingValue (
|
||||
UiObject testSwitch, String key, int defaultVal, int enabledVal) throws Exception {
|
||||
// check initial state
|
||||
int currentValue = Secure.getInt(mTargetContext.getContentResolver(), key, defaultVal);
|
||||
boolean enabled = currentValue == enabledVal;
|
||||
assertEquals(enabled, testSwitch.isChecked());
|
||||
// toggle the preference
|
||||
testSwitch.click();
|
||||
assertEquals(!enabled, testSwitch.isChecked());
|
||||
int newValue = currentValue == 1 ? 0 : 1;
|
||||
assertEquals(newValue, Secure.getInt(mTargetContext.getContentResolver(), key, defaultVal));
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user