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:
Doris Ling
2016-09-07 11:10:03 -07:00
parent a365d9123c
commit 1ad58d0abf
8 changed files with 265 additions and 60 deletions

View File

@@ -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));
}
}