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

Commit e798b478 authored by Vishnu Nair's avatar Vishnu Nair
Browse files

Add setFocusedWindow function stub

This function, once implemented, will set focus on the specified
window. This is the first step in changing focus selection from
setInputWindows and using explicit call which will help us more
easily decouple z-order from focus selection and support focus
for SurfaceViewHost surfaces.

Bug: 151179149
Test: presubmit
Test: go/wm-smoke
Test: atest inputflinger_tests

Change-Id: Ib2254b4ab3ba8d579dfe49ddf3286f8ce2eecf9e
parent 61847ccb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ cc_library_shared {

    export_shared_lib_headers: [
        "libbinder",
        "libinput",
    ],

    // bufferhub is not used when building libgui for vendors
+18 −1
Original line number Diff line number Diff line
@@ -448,19 +448,36 @@ void layer_state_t::merge(const layer_state_t& other) {

// ------------------------------- InputWindowCommands ----------------------------------------

void InputWindowCommands::merge(const InputWindowCommands& other) {
bool InputWindowCommands::merge(const InputWindowCommands& other) {
    bool changes = false;
#ifndef NO_INPUT
    changes |= !other.focusRequests.empty();
    focusRequests.insert(focusRequests.end(), std::make_move_iterator(other.focusRequests.begin()),
                         std::make_move_iterator(other.focusRequests.end()));
#endif
    changes |= other.syncInputWindows && !syncInputWindows;
    syncInputWindows |= other.syncInputWindows;
    return changes;
}

void InputWindowCommands::clear() {
#ifndef NO_INPUT
    focusRequests.clear();
#endif
    syncInputWindows = false;
}

void InputWindowCommands::write(Parcel& output) const {
#ifndef NO_INPUT
    output.writeParcelableVector(focusRequests);
#endif
    output.writeBool(syncInputWindows);
}

void InputWindowCommands::read(const Parcel& input) {
#ifndef NO_INPUT
    input.readParcelableVector(&focusRequests);
#endif
    syncInputWindows = input.readBool();
}

+15 −0
Original line number Diff line number Diff line
@@ -1364,6 +1364,21 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setInput
    return *this;
}

SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setFocusedWindow(
        const sp<IBinder>& token, const sp<IBinder>& focusedToken, nsecs_t timestampNanos) {
    FocusRequest request;
    request.token = token;
    request.focusedToken = focusedToken;
    request.timestamp = timestampNanos;
    return setFocusedWindow(request);
}

SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setFocusedWindow(
        const FocusRequest& request) {
    mInputWindowCommands.focusRequests.push_back(request);
    return *this;
}

SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::syncInputWindows() {
    mInputWindowCommands.syncInputWindows = true;
    return *this;
+6 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <math/mat4.h>

#ifndef NO_INPUT
#include <android/FocusRequest.h>
#include <input/InputWindow.h>
#endif

@@ -283,9 +284,13 @@ struct DisplayState {
};

struct InputWindowCommands {
#ifndef NO_INPUT
    std::vector<FocusRequest> focusRequests;
#endif
    bool syncInputWindows{false};

    void merge(const InputWindowCommands& other);
    // Merges the passed in commands and returns true if there were any changes.
    bool merge(const InputWindowCommands& other);
    void clear();
    void write(Parcel& output) const;
    void read(const Parcel& input);
+3 −0
Original line number Diff line number Diff line
@@ -507,6 +507,9 @@ public:

#ifndef NO_INPUT
        Transaction& setInputWindowInfo(const sp<SurfaceControl>& sc, const InputWindowInfo& info);
        Transaction& setFocusedWindow(const sp<IBinder>& token, const sp<IBinder>& focusedToken,
                                      nsecs_t timestampNanos);
        Transaction& setFocusedWindow(const FocusRequest& request);
        Transaction& syncInputWindows();
#endif

Loading