Home | History | Annotate | Download | only in uiautomator
      1 /*
      2  * Copyright (C) 2012 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 com.android.cts.uiautomator;
     18 
     19 import android.app.AlertDialog;
     20 import android.os.Bundle;
     21 import android.support.v4.app.Fragment;
     22 import android.view.LayoutInflater;
     23 import android.view.MotionEvent;
     24 import android.view.View;
     25 import android.view.ViewGroup;
     26 import android.widget.Button;
     27 import android.widget.CheckBox;
     28 import android.widget.ImageButton;
     29 import android.widget.SeekBar;
     30 import android.widget.Spinner;
     31 
     32 public class Test5DetailFragment extends Fragment {
     33 
     34     public static final String ARG_ITEM_ID = "item_id";
     35 
     36     class PointerEvent {
     37         int startX;
     38         int startY;
     39         int endX;
     40         int endY;
     41     }
     42 
     43     private final PointerEvent mPointerEvent = new PointerEvent();
     44 
     45     public Test5DetailFragment() {
     46     }
     47 
     48     @Override
     49     public void onCreate(Bundle savedInstanceState) {
     50         super.onCreate(savedInstanceState);
     51     }
     52 
     53     @Override
     54     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
     55         View rootView = inflater.inflate(R.layout.test5_detail_fragment, container, false);
     56 
     57         // Set the content description for the following
     58         Spinner spinner = (Spinner) rootView.findViewById(R.id.test_5_spinner);
     59         spinner.setContentDescription("Spinner");
     60         ImageButton imageButton = (ImageButton) rootView.findViewById(R.id.test_5_imageButton);
     61         imageButton.setContentDescription("Image button");
     62 
     63         // Each time this view is displayed, reset the following states
     64         SeekBar seekBar = (SeekBar) rootView.findViewById(R.id.test_5_seekBar);
     65         seekBar.setProgress(50);
     66         seekBar.setContentDescription("Progress is 50 %");
     67         CheckBox checkbox = (CheckBox) rootView.findViewById(R.id.test_5_checkBox);
     68         checkbox.setChecked(false);
     69 
     70         // Register click event handlers for the following
     71         Button button = (Button) rootView.findViewById(R.id.test_5_button1);
     72         button.setOnClickListener(new Button.OnClickListener() {
     73             @Override
     74             public void onClick(View v) {
     75                 // we want an artificial crash
     76                 throw new RuntimeException("Artificial crash to test UiWatcher");
     77             }
     78         });
     79 
     80         imageButton.setOnTouchListener(new ImageButton.OnTouchListener() {
     81 
     82             @Override
     83             public boolean onTouch(View v, MotionEvent event) {
     84                 if (event.getAction() == MotionEvent.ACTION_DOWN) {
     85                     resetTouchResults();
     86                     collectStartAction(event, v);
     87                 } else if (event.getAction() == MotionEvent.ACTION_UP) {
     88                     collectEndAction(event, v);
     89                     displayTouchResults();
     90                 }
     91                 return false;
     92             }
     93         });
     94 
     95         return rootView;
     96     }
     97 
     98     private void displayTouchResults() {
     99         StringBuilder output = new StringBuilder();
    100 
    101         output.append(String.format("%d,%d:%d,%d\n",
    102                 mPointerEvent.startX, mPointerEvent.startY, mPointerEvent.endX,
    103                 mPointerEvent.endY));
    104 
    105         // display the submitted text
    106         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    107         builder.setTitle(R.string.drag_item_touch_dialog_title);
    108         builder.setPositiveButton(R.string.OK, null);
    109         builder.setMessage(output.toString());
    110         AlertDialog diag = builder.create();
    111         diag.show();
    112     }
    113 
    114     /**
    115      * Clears all collected pointer results
    116      */
    117     private void resetTouchResults() {
    118          mPointerEvent.startX = mPointerEvent.startY =
    119                     mPointerEvent.endX = mPointerEvent.endY = -1;
    120     }
    121 
    122     /**
    123      * Collects pointer touch information converting from relative to absolute before
    124      * storing it as starting touch coordinates.
    125      *
    126      * @param event
    127      * @param view
    128      * @param pointerIndex
    129      */
    130     private void collectStartAction(MotionEvent event, View view) {
    131         int offsetInScreen[] = new int[2];
    132         view.getLocationOnScreen(offsetInScreen);
    133         mPointerEvent.startX = (int)(event.getX() + offsetInScreen[0]);
    134         mPointerEvent.startY = (int)(event.getY() + offsetInScreen[1]);
    135     }
    136 
    137     /**
    138      * Collects pointer touch information converting from relative to absolute before
    139      * storing it as ending touch coordinates.
    140      *
    141      * @param event
    142      * @param view
    143      * @param pointerIndex
    144      */
    145     private void collectEndAction(MotionEvent event, View view) {
    146         int offsetInScreen[] = new int[2];
    147         view.getLocationOnScreen(offsetInScreen);
    148         mPointerEvent.endX = (int)(event.getX() + offsetInScreen[0]);
    149         mPointerEvent.endY = (int)(event.getY() + offsetInScreen[1]);
    150     }
    151 }
    152