类android.app.UiAutomation.OnAccessibilityEventListener源码实例Demo

下面列出了怎么用android.app.UiAutomation.OnAccessibilityEventListener的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: JsDroidCmd   文件: UiDevice.java
public void initialize(ShellUiAutomatorBridge uiAutomatorBridge) {
	mUiAutomationBridge = uiAutomatorBridge;
	// 监听activity变化,用于getAct
	try {
		IActivityManager am = ActivityManagerNative.getDefault();
		am.setActivityController(new DummyActivityController());
	} catch (RemoteException e) {
	}
	UiAutomation uiAutomation = uiAutomatorBridge.getUiAutomation();
	uiAutomation
			.setOnAccessibilityEventListener(new OnAccessibilityEventListener() {
				public void onAccessibilityEvent(AccessibilityEvent event) {
					synchronized (onAccessibilityEventListeners) {
						for (OnAccessibilityEventListener listener : onAccessibilityEventListeners) {
							listener.onAccessibilityEvent(event);
						}
					}
				}
			});
}
 
@Before
public void setup() {
    toastText =  new ArrayList<>();
    toastText.add("toast text");

    originalAccessibilityEventListener = mock(OnAccessibilityEventListener.class);
    PowerMockito.mockStatic(InstrumentationRegistry.class);
    when(InstrumentationRegistry.getInstrumentation()).thenReturn(null);

    PowerMockito.mockStatic(UiDevice.class);
    when(UiDevice.getInstance(null)).thenReturn(mock(UiDevice.class));
    when(UiDevice.getInstance()).thenReturn(mock(UiDevice.class));

    PowerMockito.mockStatic(UiAutomatorBridge.class);
    when(UiAutomatorBridge.getInstance()).thenReturn(mock(UiAutomatorBridge.class));

    PowerMockito.mockStatic(UiAutomation.class);
    uiAutomation = mock(UiAutomation.class);
    when(UiAutomation.getInstance()).thenReturn(uiAutomation);
    when(uiAutomation.getOnAccessibilityEventListener())
            .thenReturn(originalAccessibilityEventListener);

    notificationListener = spy(new NotificationListener());
}
 
源代码3 项目: za-Farmer   文件: QueryController.java
public QueryController(UiAutomatorBridge bridge) {
    mUiAutomatorBridge = bridge;
    bridge.setOnAccessibilityEventListener(new OnAccessibilityEventListener() {
        @Override
        public void onAccessibilityEvent(AccessibilityEvent event) {
            synchronized (mLock) {
                switch(event.getEventType()) {
                    case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
                        // don't trust event.getText(), check for nulls
                        if (event.getText() != null && event.getText().size() > 0) {
                            if(event.getText().get(0) != null)
                                mLastActivityName = event.getText().get(0).toString();
                        }
                       break;
                    case AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY:
                        // don't trust event.getText(), check for nulls
                        if (event.getText() != null && event.getText().size() > 0)
                            if(event.getText().get(0) != null)
                                mLastTraversedText = event.getText().get(0).toString();
                        if (DEBUG)
                            Log.d(LOG_TAG, "Last text selection reported: " +
                                    mLastTraversedText);
                        break;
                }
                mLock.notifyAll();
            }
        }
    });
}
 
源代码4 项目: JsDroidCmd   文件: QueryController.java
public QueryController(UiAutomatorBridge bridge) {
	mUiAutomatorBridge = bridge;
	bridge.setOnAccessibilityEventListener(new OnAccessibilityEventListener() {
		@Override
		public void onAccessibilityEvent(AccessibilityEvent event) {
			synchronized (mLock) {
				switch (event.getEventType()) {
				case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
					// don't trust event.getText(), check for nulls
					if (event.getText() != null
							&& event.getText().size() > 0) {
						if (event.getText().get(0) != null)
							mLastActivityName = event.getText().get(0)
									.toString();
					}
					break;
				case AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY:
					// don't trust event.getText(), check for nulls
					if (event.getText() != null
							&& event.getText().size() > 0)
						if (event.getText().get(0) != null)
							mLastTraversedText = event.getText().get(0)
									.toString();
					if (DEBUG)
						Log.d(LOG_TAG, "Last text selection reported: "
								+ mLastTraversedText);
					break;
				}
				mLock.notifyAll();
			}
		}
	});
}
 
源代码5 项目: JsDroidCmd   文件: UiDevice.java
/**
 * 添加元素事件监听
 * 
 * @param onAccessibilityEventListener
 */
public void addAccessibilityEventListener(
		OnAccessibilityEventListener onAccessibilityEventListener) {
	synchronized (onAccessibilityEventListeners) {
		onAccessibilityEventListeners.add(onAccessibilityEventListener);
	}
}
 
源代码6 项目: appium-uiautomator2-server   文件: UiAutomation.java
@Nullable
public OnAccessibilityEventListener getOnAccessibilityEventListener() {
    try {
        return (OnAccessibilityEventListener) getField(android.app.UiAutomation.class,
                FIELD_ON_ACCESSIBILITY_EVENT_LISTENER, uiAutomation);
    } catch (Exception e) {
        /* mOnAccessibilityEventListener is no longer accessible on Android P */
        return null;
    }
}
 
@Test
public void shouldDoNothingOnStopIfListenerIsAlreadyStopped() {
    doReturn(false).when(notificationListener).isListening();
    notificationListener.stop();
    verify(uiAutomation, never())
            .setOnAccessibilityEventListener((OnAccessibilityEventListener) any());
}
 
@Test
public void shouldDoNothingOnStartIfListenerIsAlreadyStarted() {
    doReturn(true).when(notificationListener).isListening();
    notificationListener.start();
    verify(uiAutomation, never())
            .setOnAccessibilityEventListener((OnAccessibilityEventListener) any());
}
 
@Test
public void shouldRestoreOriginalListener() {
    ArgumentCaptor<OnAccessibilityEventListener> argumentCaptor =
            ArgumentCaptor.forClass(OnAccessibilityEventListener.class);
    doNothing().when(uiAutomation).setOnAccessibilityEventListener(argumentCaptor.capture());
    doReturn(false).when(notificationListener).isListening();
    notificationListener.start();
    doReturn(true).when(notificationListener).isListening();
    notificationListener.stop();

    assertEquals(notificationListener, argumentCaptor.getAllValues().get(0));
    assertEquals(originalAccessibilityEventListener, argumentCaptor.getAllValues().get(1));
}
 
源代码10 项目: za-Farmer   文件: UiAutomatorBridge.java
public void setOnAccessibilityEventListener(OnAccessibilityEventListener listener) {
    mUiAutomation.setOnAccessibilityEventListener(listener);
}
 
源代码11 项目: JsDroidCmd   文件: UiAutomatorBridge.java
public void setOnAccessibilityEventListener(
		OnAccessibilityEventListener listener) {
	mUiAutomation.setOnAccessibilityEventListener(listener);
}
 
源代码12 项目: JsDroidCmd   文件: UiDevice.java
public void removeAccessibilityEventListener(
		OnAccessibilityEventListener onAccessibilityEventListener) {
	synchronized (onAccessibilityEventListeners) {
		onAccessibilityEventListeners.remove(onAccessibilityEventListener);
	}
}
 
源代码13 项目: appium-uiautomator2-server   文件: UiAutomation.java
public void setOnAccessibilityEventListener(OnAccessibilityEventListener listener) {
    uiAutomation.setOnAccessibilityEventListener(listener);
}
 
源代码14 项目: PUMA   文件: LaunchApp.java
public void _testPassiveMonkey() {
	dev = getMyUiDevice();
	bridge = dev.getUiAutomatorBridge();

	final String appPackageName = "com.chenio.android.sixpark";
	final String fn = "/sdcard/haos/events.log";
	Util.openFile(fn, true);

	// intercept all events 
	dev.getUiAutomation().setOnAccessibilityEventListener(new OnAccessibilityEventListener() {
		public void onAccessibilityEvent(AccessibilityEvent event) {
			CharSequence pack_name = event.getPackageName();
			// only process related events
			if (pack_name != null && pack_name.equals(appPackageName)) {
				// log events
				Util.log2File(event);
			} else {
				// ignore the rest: e.g. notification etc
				// Util.err("UNKNOWN EVENT " + pack_name);
			}
		}
	});

	Thread t = new Thread() {
		public void run() {
			while (true) {
				dev.waitForIdle();

				AccessibilityNodeInfo rootNode = bridge.getRootInActiveWindow();
				if (rootNode.getPackageName().equals(appPackageName)) {
					String timestamp = new SimpleDateFormat("MM-dd'T'HH-mm-ss-SSS").format(new Date());

					boolean status = dev.takeScreenshot(new File("/sdcard/haos/" + timestamp + ".png"), 0.1f, 90);
					Util.log("Dumped screenshot: " + status);

					dev.dumpWindowHierarchy(timestamp + ".xml"); // default location "/data/local/tmp/local/tmp/*.xml"
					Util.log("Dumped view tree");
				}

				SystemClock.sleep(2000);
			}
		}
	};
	t.start();

	SystemClock.sleep(30000); // 30s

	Util.closeFile(fn);
}
 
public void testAirplaneModeToOn() {
  UiAutomation uiAutomation = getInstrumentation().getUiAutomation();
  // Activityの起動を監視するリスナーをセット
  mMainLaunched = false;
  uiAutomation
      .setOnAccessibilityEventListener(new OnAccessibilityEventListener() {
        @Override
        public void onAccessibilityEvent(AccessibilityEvent event) {
          if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
            // ウィンドウのコンテンツが変わった
            if (TARGET_PKG.equals(event.getPackageName())) {
              // MainActivityが起動した
              mMainLaunched = true;
            }
          }
        }
      });

  // MainActivity起動
  Activity target = launchActivity(TARGET_PKG, MainActivity.class, null);
  try {
    // MainActivity起動待ち
    do {
      Thread.sleep(1000);
    } while (!mMainLaunched);

    // 機内モードをOnにする
    // Settingsの起動
    Intent intent = new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    getInstrumentation().getContext().startActivity(intent);

    // Settingsの起動待ち
    AccessibilityNodeInfo root;
    while (true) {
      root = uiAutomation.getRootInActiveWindow();
      if (root != null && SETTINGS_PKG.equals(root.getPackageName())) {
        break;
      } else {
        Thread.sleep(1000);
      }
    }

    // ボタンを押す
    List<AccessibilityNodeInfo> list = root
        .findAccessibilityNodeInfosByViewId("android:id/list");
    AccessibilityNodeInfo listViewInfo = list.get(0);
    AccessibilityNodeInfo airplaneModeView = listViewInfo.getChild(0);
    List<AccessibilityNodeInfo> checkList = airplaneModeView
        .findAccessibilityNodeInfosByViewId("android:id/checkbox");
    AccessibilityNodeInfo airplaneModeCheck = checkList.get(0);
    if (!airplaneModeCheck.isChecked()) {
      airplaneModeView.performAction(AccessibilityNodeInfo.ACTION_CLICK);
    }

    // Backキーを押してSettingsの終了
    uiAutomation.performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);

    // 機内モード反映待ち
    Thread.sleep(10000);

    // TextViewの文字列検証
    String expected = target
        .getString(org.techbooster.uiautomationsample.R.string.airplane_mode_off);
    TextView textView = (TextView) target
        .findViewById(org.techbooster.uiautomationsample.R.id.text_view);
    assertEquals(expected, textView.getText().toString());

  } catch (Exception e) {
    fail(e.getMessage());
    e.printStackTrace();
  } finally {
    if (target != null) {
      target.finish();
    }
  }
}
 
 类所在包
 同包方法