package com.stardust.view.accessibility;
import android.accessibilityservice.AccessibilityService;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.view.accessibility.AccessibilityDelegate;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* Created by Stardust on 2017/3/9.
*/
public class AccessibilityInfoProvider implements AccessibilityDelegate {
private volatile String mLatestPackage = "";
private volatile String mLatestActivity = "";
private PackageManager mPackageManager;
public AccessibilityInfoProvider(PackageManager packageManager) {
mPackageManager = packageManager;
}
public String getLatestPackage() {
return mLatestPackage;
}
public String getLatestActivity() {
return mLatestActivity;
}
@Override
public boolean onAccessibilityEvent(AccessibilityService service, AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
setLatestComponent(event.getPackageName(), event.getClassName());
}
return false;
}
@Override
public Set<Integer> getEventTypes() {
return ALL_EVENT_TYPES;
}
private void setLatestComponent(CharSequence latestPackage, CharSequence latestClass) {
if (latestPackage == null || latestClass == null)
return;
String latestPackageStr = latestPackage.toString();
String latestClassStr = latestClass.toString();
if (latestClassStr.startsWith("android.view.") || latestClassStr.startsWith("android.widget."))
return;
try {
ComponentName componentName = new ComponentName(latestPackageStr, latestClassStr);
mLatestActivity = mPackageManager.getActivityInfo(componentName, 0).name;
} catch (PackageManager.NameNotFoundException ignored) {
return;
}
mLatestPackage = latestPackage.toString();
}
}