From 528fe0ca14b5e457b7bb82c2068749268d0d658f Mon Sep 17 00:00:00 2001 From: Mehdi Alizadeh Date: Tue, 3 Apr 2018 18:51:07 -0700 Subject: [PATCH] Adds the Swipe Up settings page under gestures The illusteration video is not included yet. Merged-In: I7f2b2f3251a795dfd74dbbb442692e42a5a2966e Bug: 77549883 Test: Unit tests and Manual test Change-Id: I04f01f0814f16e4e006291e61ddb07cea8e7c0d6 --- res/xml/gestures.xml | 6 ++ res/xml/swipe_up_gesture_settings.xml | 31 ++++++++ .../core/gateway/SettingsGateway.java | 2 + .../settings/gestures/GestureSettings.java | 2 + .../gestures/SwipeUpGestureSettings.java | 79 +++++++++++++++++++ .../gestures/SwipeUpPreferenceController.java | 77 ++++++++++++++++++ .../search/SearchIndexableResourcesImpl.java | 2 + .../SwipeUpPreferenceControllerTest.java | 72 +++++++++++++++++ 8 files changed, 271 insertions(+) create mode 100644 res/xml/swipe_up_gesture_settings.xml create mode 100644 src/com/android/settings/gestures/SwipeUpGestureSettings.java create mode 100644 src/com/android/settings/gestures/SwipeUpPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java diff --git a/res/xml/gestures.xml b/res/xml/gestures.xml index 0eaa2a6b505..96991a2c6b9 100644 --- a/res/xml/gestures.xml +++ b/res/xml/gestures.xml @@ -45,6 +45,12 @@ android:fragment="com.android.settings.gestures.DoubleTwistGestureSettings" settings:controller="com.android.settings.gestures.DoubleTwistPreferenceController" /> + + + + + + + + + \ No newline at end of file diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index 7842dbf3c95..afa5f5e0f03 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -78,6 +78,7 @@ import com.android.settings.gestures.AssistGestureSettings; import com.android.settings.gestures.DoubleTapPowerSettings; import com.android.settings.gestures.DoubleTapScreenSettings; import com.android.settings.gestures.DoubleTwistGestureSettings; +import com.android.settings.gestures.SwipeUpGestureSettings; import com.android.settings.gestures.PickupGestureSettings; import com.android.settings.gestures.SwipeToNotificationSettings; import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment; @@ -188,6 +189,7 @@ public class SettingsGateway { DoubleTapScreenSettings.class.getName(), PickupGestureSettings.class.getName(), DoubleTwistGestureSettings.class.getName(), + SwipeUpGestureSettings.class.getName(), CryptKeeperSettings.class.getName(), DataUsageSummary.class.getName(), DataUsageSummaryLegacy.class.getName(), diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java index f6fe82c0d54..9856e4ee17c 100644 --- a/src/com/android/settings/gestures/GestureSettings.java +++ b/src/com/android/settings/gestures/GestureSettings.java @@ -45,6 +45,7 @@ public class GestureSettings extends DashboardFragment { private static final String KEY_DOUBLE_TAP_SCREEN = "gesture_double_tap_screen_input_summary"; private static final String KEY_PICK_UP = "gesture_pick_up_input_summary"; private static final String KEY_PREVENT_RINGING = "gesture_prevent_ringing_summary"; + private static final String KEY_SWIPE_UP = "gesture_swipe_up_input_summary"; private AmbientDisplayConfiguration mAmbientDisplayConfig; @@ -115,6 +116,7 @@ public class GestureSettings extends DashboardFragment { keys.add(KEY_SWIPE_DOWN); keys.add(KEY_DOUBLE_TAP_POWER); keys.add(KEY_DOUBLE_TWIST); + keys.add(KEY_SWIPE_UP); keys.add(KEY_DOUBLE_TAP_SCREEN); keys.add(KEY_PICK_UP); diff --git a/src/com/android/settings/gestures/SwipeUpGestureSettings.java b/src/com/android/settings/gestures/SwipeUpGestureSettings.java new file mode 100644 index 00000000000..1fe74c6c722 --- /dev/null +++ b/src/com/android/settings/gestures/SwipeUpGestureSettings.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2018 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.gestures; + +import android.content.Context; +import android.content.SharedPreferences; +import android.provider.SearchIndexableResource; + +import com.android.internal.logging.nano.MetricsProto; +import com.android.settings.R; +import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; +import com.android.settings.overlay.FeatureFactory; +import com.android.settings.search.BaseSearchIndexProvider; + +import java.util.Arrays; +import java.util.List; + +public class SwipeUpGestureSettings extends DashboardFragment { + + private static final String TAG = "SwipeUpGesture"; + + public static final String PREF_KEY_SUGGESTION_COMPLETE = + "pref_swipe_up_suggestion_complete"; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + SuggestionFeatureProvider suggestionFeatureProvider = FeatureFactory.getFactory(context) + .getSuggestionFeatureProvider(context); + SharedPreferences prefs = suggestionFeatureProvider.getSharedPrefs(context); + prefs.edit().putBoolean(PREF_KEY_SUGGESTION_COMPLETE, true).apply(); + } + + @Override + public int getMetricsCategory() { + return MetricsProto.MetricsEvent.SETTINGS_GESTURE_SWIPE_UP; + } + + @Override + protected String getLogTag() { + return TAG; + } + + @Override + protected int getPreferenceScreenResId() { + return R.xml.swipe_up_gesture_settings; + } + + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex( + Context context, boolean enabled) { + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.swipe_up_gesture_settings; + return Arrays.asList(sir); + } + + @Override + protected boolean isPageSearchEnabled(Context context) { + return SwipeUpPreferenceController.isGestureAvailable(context); + } + }; +} diff --git a/src/com/android/settings/gestures/SwipeUpPreferenceController.java b/src/com/android/settings/gestures/SwipeUpPreferenceController.java new file mode 100644 index 00000000000..eb74e07db10 --- /dev/null +++ b/src/com/android/settings/gestures/SwipeUpPreferenceController.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2018 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.gestures; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Resources; +import android.os.UserHandle; +import android.os.UserManager; +import android.provider.Settings; +import android.support.annotation.VisibleForTesting; +import android.text.TextUtils; + +import com.android.settings.R; +import com.android.settings.Utils; + +public class SwipeUpPreferenceController extends GesturePreferenceController { + + private final int ON = 1; + private final int OFF = 0; + + // TODO(77474484): Update when swipe up illustration video is ready + private static final String PREF_KEY_VIDEO = ""; + private final UserManager mUserManager; + + public SwipeUpPreferenceController(Context context, String key) { + super(context, key); + mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); + } + + static boolean isGestureAvailable(Context context) { + return true; + } + + @Override + public int getAvailabilityStatus() { + return isGestureAvailable(mContext) ? AVAILABLE : DISABLED_UNSUPPORTED; + } + + @Override + protected String getVideoPrefKey() { + return PREF_KEY_VIDEO; + } + + @Override + public boolean setChecked(boolean isChecked) { + setSwipeUpPreference(mContext, mUserManager, isChecked ? ON : OFF); + return true; + } + + public static void setSwipeUpPreference(Context context, UserManager userManager, + int enabled) { + Settings.Secure.putInt(context.getContentResolver(), + Settings.Secure.SWIPE_UP_TO_SWITCH_APPS_ENABLED, enabled); + } + + @Override + public boolean isChecked() { + final int swipeUpEnabled = Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.SWIPE_UP_TO_SWITCH_APPS_ENABLED, OFF); + return swipeUpEnabled != OFF; + } +} diff --git a/src/com/android/settings/search/SearchIndexableResourcesImpl.java b/src/com/android/settings/search/SearchIndexableResourcesImpl.java index 78b18a6bdd9..543d4e3cbb4 100644 --- a/src/com/android/settings/search/SearchIndexableResourcesImpl.java +++ b/src/com/android/settings/search/SearchIndexableResourcesImpl.java @@ -56,6 +56,7 @@ import com.android.settings.gestures.AssistGestureSettings; import com.android.settings.gestures.DoubleTapPowerSettings; import com.android.settings.gestures.DoubleTapScreenSettings; import com.android.settings.gestures.DoubleTwistGestureSettings; +import com.android.settings.gestures.SwipeUpGestureSettings; import com.android.settings.gestures.GestureSettings; import com.android.settings.gestures.PickupGestureSettings; import com.android.settings.gestures.SwipeToNotificationSettings; @@ -130,6 +131,7 @@ public class SearchIndexableResourcesImpl implements SearchIndexableResources { addIndex(DoubleTapScreenSettings.class); addIndex(DoubleTapPowerSettings.class); addIndex(DoubleTwistGestureSettings.class); + addIndex(SwipeUpGestureSettings.class); addIndex(SwipeToNotificationSettings.class); addIndex(GestureSettings.class); addIndex(LanguageAndInputSettings.class); diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java new file mode 100644 index 00000000000..f9a6e9cfbc1 --- /dev/null +++ b/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2018 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.gestures; + +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.content.Context; +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 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.annotation.Config; + +import java.util.ArrayList; +import java.util.List; + +@RunWith(SettingsRobolectricTestRunner.class) +public class SwipeUpPreferenceControllerTest { + + private Context mContext; + private SwipeUpPreferenceController mController; + private static final String KEY_SWIPE_UP = "gesture_swipe_up"; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mController = new SwipeUpPreferenceController(mContext, KEY_SWIPE_UP); + } + + @Test + public void testIsChecked_configIsSet_shouldReturnTrue() { + // Set the setting to be enabled. + mController.setChecked(true); + assertThat(mController.isChecked()).isTrue(); + } + + @Test + public void testIsChecked_configIsNotSet_shouldReturnFalse() { + // Set the setting to be disabled. + mController.setChecked(false); + assertThat(mController.isChecked()).isFalse(); + } +}