api(events): events.setKeyInterceptionEnabled()

This commit is contained in:
hyb1996
2018-02-27 17:03:09 +08:00
parent a43ac939e9
commit 528171b77d
4 changed files with 78 additions and 11 deletions

View File

@@ -1,8 +1,6 @@
package com.stardust.view.accessibility;
import android.content.Context;
import android.os.Build;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.KeyEvent;
@@ -13,10 +11,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.Timer;
import java.util.TimerTask;
import java.util.TreeMap;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@@ -40,6 +35,7 @@ public class AccessibilityService extends android.accessibilityservice.Accessibi
private static boolean containsAllEventTypes = false;
private static final Set<Integer> eventTypes = new HashSet<>();
private OnKeyListener.Observer mOnKeyObserver = new OnKeyListener.Observer();
private KeyInterceptor.Observer mKeyInterrupterObserver = new KeyInterceptor.Observer();
private ExecutorService mKeyEventExecutor;
private AccessibilityNodeInfo mFastRootInActiveWindow;
@@ -97,7 +93,11 @@ public class AccessibilityService extends android.accessibilityservice.Accessibi
stickOnKeyObserver.onKeyEvent(event.getKeyCode(), event);
mOnKeyObserver.onKeyEvent(event.getKeyCode(), event);
});
return false;
return mKeyInterrupterObserver.onInterceptKeyEvent(event);
}
public KeyInterceptor.Observer getKeyInterrupterObserver() {
return mKeyInterrupterObserver;
}
public OnKeyListener.Observer getOnKeyObserver() {

View File

@@ -0,0 +1,41 @@
package com.stardust.view.accessibility;
import android.view.KeyEvent;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* Created by Stardust on 2018/2/27.
*/
public interface KeyInterceptor {
boolean onInterceptKeyEvent(KeyEvent event);
class Observer implements KeyInterceptor {
private CopyOnWriteArrayList<KeyInterceptor> mKeyInterceptors = new CopyOnWriteArrayList<>();
public void addKeyInterrupter(KeyInterceptor interrupter){
mKeyInterceptors.add(interrupter);
}
public boolean removeKeyInterrupter(KeyInterceptor interrupter){
return mKeyInterceptors.remove(interrupter);
}
@Override
public boolean onInterceptKeyEvent(KeyEvent event) {
for(KeyInterceptor interrupter : mKeyInterceptors){
try {
if(interrupter.onInterceptKeyEvent(event)){
return true;
}
}catch (Exception e){
e.printStackTrace();
}
}
return false;
}
}
}