diff --git a/src/com/android/settings/gestures/SwipeUpPreferenceController.java b/src/com/android/settings/gestures/SwipeUpPreferenceController.java index a20cd9738e7..c3abd464ee8 100644 --- a/src/com/android/settings/gestures/SwipeUpPreferenceController.java +++ b/src/com/android/settings/gestures/SwipeUpPreferenceController.java @@ -16,8 +16,11 @@ package com.android.settings.gestures; +import android.content.ComponentName; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.content.res.Resources; import android.os.UserHandle; import android.os.UserManager; @@ -33,6 +36,7 @@ public class SwipeUpPreferenceController extends GesturePreferenceController { private final int ON = 1; private final int OFF = 0; + private static final String ACTION_QUICKSTEP = "android.intent.action.QUICKSTEP_SERVICE"; private static final String PREF_KEY_VIDEO = "gesture_swipe_up_video"; private final UserManager mUserManager; @@ -42,6 +46,14 @@ public class SwipeUpPreferenceController extends GesturePreferenceController { } static boolean isGestureAvailable(Context context) { + final ComponentName recentsComponentName = ComponentName.unflattenFromString( + context.getString(com.android.internal.R.string.config_recentsComponentName)); + final Intent quickStepIntent = new Intent(ACTION_QUICKSTEP) + .setPackage(recentsComponentName.getPackageName()); + if (context.getPackageManager().resolveService(quickStepIntent, + PackageManager.MATCH_SYSTEM_ONLY) == null) { + return false; + } return true; } diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java index f9a6e9cfbc1..360609bd169 100644 --- a/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java @@ -17,12 +17,14 @@ 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.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; @@ -38,7 +40,8 @@ import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; +import org.robolectric.Shadows; +import org.robolectric.shadows.ShadowPackageManager; import java.util.ArrayList; import java.util.List; @@ -47,15 +50,35 @@ import java.util.List; public class SwipeUpPreferenceControllerTest { private Context mContext; + private ShadowPackageManager mPackageManager; private SwipeUpPreferenceController mController; + + private static final String ACTION_QUICKSTEP = "android.intent.action.QUICKSTEP_SERVICE"; private static final String KEY_SWIPE_UP = "gesture_swipe_up"; @Before public void setUp() { mContext = RuntimeEnvironment.application; + mPackageManager = Shadows.shadowOf(mContext.getPackageManager()); mController = new SwipeUpPreferenceController(mContext, KEY_SWIPE_UP); } + @Test + public void testIsGestureAvailable_matchingServiceExists_shouldReturnTrue() { + 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)).isTrue(); + } + + @Test + public void testIsGestureAvailable_noMatchingServiceExists_shouldReturnFalse() { + assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isFalse(); + } + @Test public void testIsChecked_configIsSet_shouldReturnTrue() { // Set the setting to be enabled.