1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.view; 18 19 import android.content.Context; 20 import android.support.test.InstrumentationRegistry; 21 import android.support.test.runner.AndroidJUnit4; 22 import android.test.ActivityInstrumentationTestCase2; 23 import android.util.DisplayMetrics; 24 import android.view.PinchZoomAction; 25 import android.view.ScaleGesture; 26 import android.view.WindowManager; 27 import android.widget.TextView; 28 29 import com.android.frameworks.coretests.R; 30 31 import org.junit.After; 32 import org.junit.Before; 33 import org.junit.Test; 34 import org.junit.runner.RunWith; 35 36 import static android.support.test.espresso.matcher.ViewMatchers.withId; 37 import static android.support.test.espresso.Espresso.onView; 38 39 public class ScaleGestureDetectorTest extends ActivityInstrumentationTestCase2<ScaleGesture> { 40 private ScaleGesture mScaleGestureActivity; 41 42 public ScaleGestureDetectorTest() { 43 super("com.android.frameworks.coretests", ScaleGesture.class); 44 } 45 46 @Before 47 public void setUp() throws Exception { 48 super.setUp(); 49 injectInstrumentation(InstrumentationRegistry.getInstrumentation()); 50 mScaleGestureActivity = getActivity(); 51 } 52 53 @After 54 public void tearDown() throws Exception { 55 super.tearDown(); 56 } 57 58 @Test 59 public void testScaleGestureDetector() { 60 // No scaling should have occurred prior to performing pinch zoom action. 61 final float initialScaleFactor = 1.0f; 62 assertEquals(initialScaleFactor, mScaleGestureActivity.getScaleFactor()); 63 64 // Specify start and end coordinates, irrespective of device display size. 65 final DisplayMetrics dm = new DisplayMetrics(); 66 final WindowManager wm = (WindowManager) (mScaleGestureActivity.getApplicationContext()) 67 .getSystemService(Context.WINDOW_SERVICE); 68 wm.getDefaultDisplay().getMetrics(dm); 69 final int displayWidth = dm.widthPixels; 70 final int displayHeight = dm.heightPixels; 71 72 // Obtain coordinates to perform pinch and zoom from the center, to 75% of the display. 73 final int centerX = displayWidth / 2; 74 final int centerY = displayHeight / 2; 75 76 // Offset center coordinates by one, so that the two starting points are different. 77 final float[] firstFingerStartCoords = new float[] {centerX + 1.0f, centerY - 1.0f}; 78 final float[] firstFingerEndCoords = 79 new float[] {0.75f * displayWidth, 0.25f * displayHeight}; 80 final float[] secondFingerStartCoords = new float[] {centerX - 1.0f, centerY + 1.0f}; 81 final float[] secondFingerEndCoords = 82 new float[] {0.25f * displayWidth, 0.75f * displayHeight}; 83 84 onView(withId(R.id.article)).perform(new PinchZoomAction(firstFingerStartCoords, 85 firstFingerEndCoords, secondFingerStartCoords, secondFingerEndCoords, 86 TextView.class)); 87 88 // Text should have been 'zoomed', meaning scale factor increased. 89 assertTrue(mScaleGestureActivity.getScaleFactor() > initialScaleFactor); 90 } 91 }