Adds two overlay settings fields for Swipe Up gesture

Adds two overlay settings for Swipe Up gesture, one for the default
value (enabled/disabled), and another one to show/hide the Swipe Up
settings page in Settings app.

Bug: 78908915
Bug: 78641268
Test: Robotests and Manual test
Change-Id: If7bea967f3af9ebe96ab87e8a4d6d05c5daa4ed5
This commit is contained in:
Mehdi Alizadeh
2018-05-04 11:42:46 -07:00
parent cda8a44cee
commit c93a97d9d5
3 changed files with 52 additions and 10 deletions

View File

@@ -131,4 +131,7 @@
<!-- List of a11y components on the device allowed to be enabled by Settings Slices -->
<string-array name="config_settings_slices_accessibility_components" translatable="false"/>
<!-- Whether or not swipe up gesture's opt-in setting is available on this device -->
<bool name="config_swipe_up_gesture_setting_available">false</bool>
</resources>

View File

@@ -39,6 +39,10 @@ public class SwipeUpPreferenceController extends GesturePreferenceController {
}
static boolean isGestureAvailable(Context context) {
if (!context.getResources().getBoolean(R.bool.config_swipe_up_gesture_setting_available)) {
return false;
}
final ComponentName recentsComponentName = ComponentName.unflattenFromString(
context.getString(com.android.internal.R.string.config_recentsComponentName));
final Intent quickStepIntent = new Intent(ACTION_QUICKSTEP)
@@ -74,8 +78,10 @@ public class SwipeUpPreferenceController extends GesturePreferenceController {
@Override
public boolean isChecked() {
final int defaultValue = mContext.getResources()
.getBoolean(com.android.internal.R.bool.config_swipe_up_gesture_default) ? ON : OFF;
final int swipeUpEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.SWIPE_UP_TO_SWITCH_APPS_ENABLED, OFF);
Settings.Secure.SWIPE_UP_TO_SWITCH_APPS_ENABLED, defaultValue);
return swipeUpEnabled != OFF;
}
}

View File

@@ -18,35 +18,32 @@ package com.android.settings.gestures;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.UserManager;
import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowPackageManager;
import java.util.ArrayList;
import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = SettingsShadowResources.class)
public class SwipeUpPreferenceControllerTest {
private Context mContext;
@@ -58,11 +55,21 @@ public class SwipeUpPreferenceControllerTest {
@Before
public void setUp() {
SettingsShadowResources.overrideResource(R.bool.config_swipe_up_gesture_setting_available,
true);
SettingsShadowResources.overrideResource(
com.android.internal.R.bool.config_swipe_up_gesture_default, true);
mContext = RuntimeEnvironment.application;
mPackageManager = Shadows.shadowOf(mContext.getPackageManager());
mController = new SwipeUpPreferenceController(mContext, KEY_SWIPE_UP);
}
@After
public void tearDown() {
SettingsShadowResources.reset();
}
@Test
public void testIsGestureAvailable_matchingServiceExists_shouldReturnTrue() {
final ComponentName recentsComponentName = ComponentName.unflattenFromString(
@@ -74,20 +81,46 @@ public class SwipeUpPreferenceControllerTest {
assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isTrue();
}
@Test
public void testIsGestureAvailable_overlayDisabled_matchingServiceExists_shouldReturnFalse() {
SettingsShadowResources.overrideResource(R.bool.config_swipe_up_gesture_setting_available,
false);
final ComponentName recentsComponentName = ComponentName.unflattenFromString(
mContext.getString(com.android.internal.R.string.config_recentsComponentName));
final Intent quickStepIntent = new Intent(ACTION_QUICKSTEP)
.setPackage(recentsComponentName.getPackageName());
mPackageManager.addResolveInfoForIntent(quickStepIntent, new ResolveInfo());
assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isFalse();
}
@Test
public void testIsGestureAvailable_noMatchingServiceExists_shouldReturnFalse() {
assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isFalse();
}
@Test
public void testIsChecked_configIsSet_shouldReturnTrue() {
public void testIsChecked_defaultIsTrue_shouldReturnTrue() {
assertThat(mController.isChecked()).isTrue();
}
@Test
public void testIsChecked_defaultIsFalse_shouldReturnFalse() {
SettingsShadowResources.overrideResource(
com.android.internal.R.bool.config_swipe_up_gesture_default, false);
assertThat(mController.isChecked()).isFalse();
}
@Test
public void testIsChecked_setCheckedTrue_shouldReturnTrue() {
// Set the setting to be enabled.
mController.setChecked(true);
assertThat(mController.isChecked()).isTrue();
}
@Test
public void testIsChecked_configIsNotSet_shouldReturnFalse() {
public void testIsChecked_setCheckedFalse_shouldReturnFalse() {
// Set the setting to be disabled.
mController.setChecked(false);
assertThat(mController.isChecked()).isFalse();