Home | History | Annotate | Download | only in activities
      1 /*
      2  * Copyright (C) 2010 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.accessibilityservice.cts.activities;
     18 
     19 import android.accessibilityservice.cts.R;
     20 
     21 import android.os.Bundle;
     22 import android.view.View;
     23 import android.view.ViewGroup;
     24 import android.view.accessibility.AccessibilityEvent;
     25 import android.view.accessibility.AccessibilityNodeInfo;
     26 import android.widget.BaseAdapter;
     27 import android.widget.ListAdapter;
     28 import android.widget.ListView;
     29 import android.widget.TextView;
     30 
     31 /**
     32  * This class is an {@link android.app.Activity} used to perform end-to-end
     33  * testing of the accessibility feature by interaction with the
     34  * UI widgets.
     35  */
     36 public class AccessibilityEndToEndActivity extends AccessibilityTestActivity {
     37     private PackageNameInjector mPackageNameInjector;
     38 
     39     @Override
     40     protected void onCreate(Bundle savedInstanceState) {
     41         super.onCreate(savedInstanceState);
     42         setContentView(R.layout.end_to_end_test);
     43 
     44         ListAdapter listAdapter = new BaseAdapter() {
     45             public View getView(int position, View convertView, ViewGroup parent) {
     46                 TextView textView = (TextView) View
     47                         .inflate(AccessibilityEndToEndActivity.this, R.layout.list_view_row, null);
     48                 textView.setText((String) getItem(position));
     49                 return textView;
     50             }
     51 
     52             public long getItemId(int position) {
     53                 return position;
     54             }
     55 
     56             public Object getItem(int position) {
     57                 if (position == 0) {
     58                     return AccessibilityEndToEndActivity.this.getString(R.string.first_list_item);
     59                 } else {
     60                     return AccessibilityEndToEndActivity.this.getString(R.string.second_list_item);
     61                 }
     62             }
     63 
     64             public int getCount() {
     65                 return 2;
     66             }
     67         };
     68 
     69         ListView listView = (ListView) findViewById(R.id.listview);
     70         listView.setAdapter(listAdapter);
     71     }
     72 
     73     public void setReportedPackageName(String packageName) {
     74         if (packageName != null) {
     75             mPackageNameInjector = new PackageNameInjector(packageName);
     76         } else {
     77             mPackageNameInjector = null;
     78         }
     79         setPackageNameInjector(getWindow().getDecorView(), mPackageNameInjector);
     80     }
     81 
     82     private static void setPackageNameInjector(View node, PackageNameInjector injector) {
     83         if (node == null) {
     84             return;
     85         }
     86         node.setAccessibilityDelegate(injector);
     87         if (node instanceof ViewGroup) {
     88             final ViewGroup viewGroup = (ViewGroup) node;
     89             final int childCount = viewGroup.getChildCount();
     90             for (int i = 0; i < childCount; i++) {
     91                 setPackageNameInjector(viewGroup.getChildAt(i), injector);
     92             }
     93         }
     94     }
     95 
     96     private static class PackageNameInjector extends View.AccessibilityDelegate {
     97         private final String mPackageName;
     98 
     99         PackageNameInjector(String packageName) {
    100             mPackageName = packageName;
    101         }
    102 
    103         @Override
    104         public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
    105             super.onInitializeAccessibilityEvent(host, event);
    106             event.setPackageName(mPackageName);
    107         }
    108 
    109         @Override
    110         public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
    111             super.onInitializeAccessibilityNodeInfo(host, info);
    112             info.setPackageName(mPackageName);
    113         }
    114     }
    115 }
    116