Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 291d88aa authored by chaviw's avatar chaviw
Browse files

Add synchronous transaction to wait for setInputWindow to complete (3/n)

Added callback for InputDispatcher to report back to SF.

Pass in an interface callback to setInputWindows so InputDispatcher can send
a response when setInputWindows has completed. The callback can be null
so InputDispatcher knows not to send a response on every setInputWindows
call.

Bug: 123041491
Test: Builds, runs
Change-Id: I18b28141a0bb5f2e1ffb406d601dc7822ca89ecd
parent 75188998
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@

#include <utils/Vector.h>
#include <input/InputWindow.h>
#include <input/ISetInputWindowsListener.h>

namespace android {

@@ -35,7 +36,8 @@ class IInputFlinger : public IInterface {
public:
    DECLARE_META_INTERFACE(InputFlinger)

    virtual void setInputWindows(const Vector<InputWindowInfo>& inputHandles) = 0;
    virtual void setInputWindows(const Vector<InputWindowInfo>& inputHandles,
            const sp<ISetInputWindowsListener>& setInputWindowsListener) = 0;
    virtual void transferTouchFocus(const sp<IBinder>& fromToken, const sp<IBinder>& toToken) = 0;
    virtual void registerInputChannel(const sp<InputChannel>& channel) = 0;
    virtual void unregisterInputChannel(const sp<InputChannel>& channel) = 0;
+40 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include <binder/IInterface.h>
#include <binder/Parcel.h>

namespace android {

class ISetInputWindowsListener : public IInterface {
public:
    DECLARE_META_INTERFACE(SetInputWindowsListener)
    virtual void onSetInputWindowsFinished() = 0;
};

class BnSetInputWindowsListener: public BnInterface<ISetInputWindowsListener> {
public:
    enum SetInputWindowsTag : uint32_t {
        ON_SET_INPUT_WINDOWS_FINISHED
    };

    virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply,
                                uint32_t flags = 0) override;
};

}; // namespace android
+0 −11
Original line number Diff line number Diff line
@@ -806,12 +806,6 @@ public:
        }
        return error;
    }

    virtual void setInputWindowsFinished() {
        Parcel data, reply;
        data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
        remote()->transact(BnSurfaceComposer::SET_INPUT_WINDOWS_FINISHED, data, &reply);
    }
};

// Out-of-line virtual method definition to trigger vtable emission in this
@@ -1323,11 +1317,6 @@ status_t BnSurfaceComposer::onTransact(
            }
            return removeRegionSamplingListener(listener);
        }
        case SET_INPUT_WINDOWS_FINISHED: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            setInputWindowsFinished();
            return NO_ERROR;
        }
        default: {
            return BBinder::onTransact(code, data, reply, flags);
        }
+0 −3
Original line number Diff line number Diff line
@@ -359,8 +359,6 @@ public:
     * Removes a listener that was streaming median luma updates from SurfaceFlinger.
     */
    virtual status_t removeRegionSamplingListener(const sp<IRegionSamplingListener>& listener) = 0;

    virtual void setInputWindowsFinished() = 0;
};

// ----------------------------------------------------------------------------
@@ -408,7 +406,6 @@ public:
        GET_PHYSICAL_DISPLAY_IDS,
        ADD_REGION_SAMPLING_LISTENER,
        REMOVE_REGION_SAMPLING_LISTENER,
        SET_INPUT_WINDOWS_FINISHED,

        // Always append new enum to the end.
    };
+1 −1
Original line number Diff line number Diff line
@@ -254,7 +254,7 @@ struct InputWindowCommands {
    };

    std::vector<TransferTouchFocusCommand> transferTouchFocusCommands;
    bool syncInputWindows;
    bool syncInputWindows{false};

    void merge(const InputWindowCommands& other);
    void clear();
Loading