android10 手势相关

由毕俊强创建, 最后修改于4月 02, 2021 13:59转至元数据起始systemui 和 launcher3通过ISystemUiProxy 和 IOverviewProxy进行了互相绑定,将自己的方法和状态提供给了对方。我们着重看一下手势服务./packages/apps/Launcher3/quickstep/recents_ui_overrides/TouchInteractionService.java privatevoidi...
摘要由CSDN通过智能技术生成
  • 由 b178903294创建, 最后修改于4月 02, 2021 13:59

 

 

 

systemui 和 launcher3通过ISystemUiProxy 和 IOverviewProxy进行了互相绑定,将自己的方法和状态提供给了对方。

 

 

我们着重看一下手势服务./packages/apps/Launcher3/quickstep/recents_ui_overrides/

 

TouchInteractionService.java

private void initInputMonitor() {

    if (!mMode.hasGestures || mISystemUiProxy == null) {

        return;

    }                                                                                                                                                                                                                      

    disposeEventHandlers();

    try {

        mInputMonitorCompat = InputMonitorCompat.fromBundle(mISystemUiProxy

             .monitorGestureInput("swipe-up", mDefaultDisplayId), KEY_EXTRA_INPUT_MONITOR);

        mInputEventReceiver = mInputMonitorCompat.getInputReceiver(Looper.getMainLooper(),

             mMainChoreographer, this::onInputEvent);

    catch (RemoteException e) {

        Log.e(TAG, "Unable to create input monitor", e);

    }

    initTouchBounds();

}

 

通过InputEventReceiver 注册了touch事件分发接收处理回调。 当有touch事件发生的时候 InputEventReceiver会将事件分发给每一个接收者的。

 

 

之后onInputEvent负责对事件进行识别,先识别点击区域,识别到是AssistantTouch 就会将事件发送给对应的AssistantTouch消费者,这个应该是语音助手的快捷按钮。

 

private void onInputEvent(InputEvent ev) {

    if (!(ev instanceof MotionEvent)) {

        Log.e(TAG, "Unknown event " + ev);

        return;

    }

    MotionEvent event = (MotionEvent) ev;

    TOUCH_INTERACTION_LOG.addLog("onMotionEvent", event.getActionMasked());

    if (event.getAction() == ACTION_DOWN) {

        if (mSwipeTouchRegion.contains(event.getX(), event.getY())) {  //判断触发区域

            boolean useSharedState = mConsumer.useSharedSwipeState();

            mConsumer.onConsumerAboutToBeSwitched();

            mConsumer = newConsumer(useSharedState, event);                            //  分配对应的消费者

            TOUCH_INTERACTION_LOG.addLog("setInputConsumer", mConsumer.getType());

            mUncheckedConsumer = mConsumer;

        else if (mIsUserUnlocked && mMode == Mode.NO_BUTTON

                && canTriggerAssistantAction(event)) {

            // Do not change mConsumer as if there is an ongoing QuickSwitch gesture, we should

            // not interrupt it. QuickSwitch assumes that interruption can only happen if the

            // next gesture is also quick switch.

            mUncheckedConsumer =

                    new AssistantTouchConsumer(this, mISystemUiProxy,                     //   安卓原生的语音助手一类的东西

                            mOverviewComponentObserver.getActivityControlHelper(),

                            InputConsumer.NO_OP, mInputMonitorCompat);

        else {

            mUncheckedConsumer = InputConsumer.NO_OP;

        }

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值