164f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato/* 264f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* Copyright (C) 2016 The Android Open Source Project 364f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* 464f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* Licensed under the Apache License, Version 2.0 (the "License"); 564f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* you may not use this file except in compliance with the License. 664f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* You may obtain a copy of the License at 764f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* 864f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* http://www.apache.org/licenses/LICENSE-2.0 964f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* 1064f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* Unless required by applicable law or agreed to in writing, software 1164f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* distributed under the License is distributed on an "AS IS" BASIS, 1264f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1364f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* See the License for the specific language governing permissions and 1464f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato* limitations under the License. 1564f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato*/ 1664f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 1764f5117b7edc174f57b087b3a9f97602e7980e02Sara Katopackage android.view; 1864f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 1964f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport android.content.Context; 2064f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport android.support.test.InstrumentationRegistry; 2164f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport android.support.test.runner.AndroidJUnit4; 2264f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport android.test.ActivityInstrumentationTestCase2; 2364f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport android.util.DisplayMetrics; 2464f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport android.view.PinchZoomAction; 2564f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport android.view.ScaleGesture; 2664f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport android.view.WindowManager; 2764f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport android.widget.TextView; 2864f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 2964f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport com.android.frameworks.coretests.R; 3064f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 3164f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport org.junit.After; 3264f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport org.junit.Before; 3364f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport org.junit.Test; 3464f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport org.junit.runner.RunWith; 3564f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 3664f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport static android.support.test.espresso.matcher.ViewMatchers.withId; 3764f5117b7edc174f57b087b3a9f97602e7980e02Sara Katoimport static android.support.test.espresso.Espresso.onView; 3864f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 3964f5117b7edc174f57b087b3a9f97602e7980e02Sara Katopublic class ScaleGestureDetectorTest extends ActivityInstrumentationTestCase2<ScaleGesture> { 4064f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato private ScaleGesture mScaleGestureActivity; 4164f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 4264f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato public ScaleGestureDetectorTest() { 4364f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato super("com.android.frameworks.coretests", ScaleGesture.class); 4464f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato } 4564f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 4664f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato @Before 4764f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato public void setUp() throws Exception { 4864f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato super.setUp(); 4964f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato injectInstrumentation(InstrumentationRegistry.getInstrumentation()); 5064f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato mScaleGestureActivity = getActivity(); 5164f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato } 5264f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 5364f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato @After 5464f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato public void tearDown() throws Exception { 5564f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato super.tearDown(); 5664f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato } 5764f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 5864f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato @Test 5964f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato public void testScaleGestureDetector() { 6064f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato // No scaling should have occurred prior to performing pinch zoom action. 6164f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final float initialScaleFactor = 1.0f; 6264f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato assertEquals(initialScaleFactor, mScaleGestureActivity.getScaleFactor()); 6364f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 6464f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato // Specify start and end coordinates, irrespective of device display size. 6564f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final DisplayMetrics dm = new DisplayMetrics(); 6664f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final WindowManager wm = (WindowManager) (mScaleGestureActivity.getApplicationContext()) 6764f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato .getSystemService(Context.WINDOW_SERVICE); 6864f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato wm.getDefaultDisplay().getMetrics(dm); 6964f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final int displayWidth = dm.widthPixels; 7064f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final int displayHeight = dm.heightPixels; 7164f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 7264f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato // Obtain coordinates to perform pinch and zoom from the center, to 75% of the display. 7364f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final int centerX = displayWidth / 2; 7464f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final int centerY = displayHeight / 2; 7564f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 7664f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato // Offset center coordinates by one, so that the two starting points are different. 7764f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final float[] firstFingerStartCoords = new float[] {centerX + 1.0f, centerY - 1.0f}; 7864f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final float[] firstFingerEndCoords = 7964f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato new float[] {0.75f * displayWidth, 0.25f * displayHeight}; 8064f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final float[] secondFingerStartCoords = new float[] {centerX - 1.0f, centerY + 1.0f}; 8164f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato final float[] secondFingerEndCoords = 8264f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato new float[] {0.25f * displayWidth, 0.75f * displayHeight}; 8364f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 8464f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato onView(withId(R.id.article)).perform(new PinchZoomAction(firstFingerStartCoords, 8564f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato firstFingerEndCoords, secondFingerStartCoords, secondFingerEndCoords, 8664f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato TextView.class)); 8764f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato 8864f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato // Text should have been 'zoomed', meaning scale factor increased. 8964f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato assertTrue(mScaleGestureActivity.getScaleFactor() > initialScaleFactor); 9064f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato } 9164f5117b7edc174f57b087b3a9f97602e7980e02Sara Kato}