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

Commit 64b76d4d authored by Corinna Vinschen's avatar Corinna Vinschen Committed by Michael Bestas
Browse files

PowerManager: Allow to distinguish different keypresses



* Use keypress info to exclude pressing volume keys from
  illuminating HW buttons in config_buttonLightOnKeypressOnly
  mode.

Change-Id: I6bfc7ddd075e12e1ad10c3663a63e80c8d7f983d
Signed-off-by: default avatarCorinna Vinschen <xda@vinschen.de>
parent a12a16fe
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -342,6 +342,15 @@ public final class PowerManager {
    @SystemApi
    public static final int USER_ACTIVITY_FLAG_INDIRECT = 1 << 1;

    /**
     * @hide
     * User activity flag: Certain hardware buttons are not supposed to
     * activate hardware button illumination.  This flag indicates a
     * button event from one of those buttons.
     * @hide
     */
    public static final int USER_ACTIVITY_FLAG_NO_BUTTON_LIGHTS = 1 << 2;

    /**
     * @hide
     */
+4 −2
Original line number Diff line number Diff line
@@ -1693,8 +1693,10 @@ public final class PowerManagerService extends SystemService
            } else {
                if (eventTime > mLastUserActivityTime) {
                    mButtonPressed = event == PowerManager.USER_ACTIVITY_EVENT_BUTTON;
                    if ((mButtonLightOnKeypressOnly && mButtonPressed)
                            || eventTime == mLastWakeTime) {
                    if (eventTime == mLastWakeTime ||
                            (mButtonLightOnKeypressOnly && mButtonPressed &&
                                    (flags & PowerManager.USER_ACTIVITY_FLAG_NO_BUTTON_LIGHTS)
                                            == 0)) {
                        mButtonPressed = true;
                        mLastButtonActivityTime = eventTime;
                    }
+3 −3
Original line number Diff line number Diff line
@@ -256,7 +256,7 @@ public:
                                                  uint32_t policyFlags) override;
    virtual bool dispatchUnhandledKey(const sp<IBinder>& token, const KeyEvent* keyEvent,
                                      uint32_t policyFlags, KeyEvent* outFallbackKeyEvent) override;
    virtual void pokeUserActivity(nsecs_t eventTime, int32_t eventType) override;
    virtual void pokeUserActivity(nsecs_t eventTime, int32_t eventType, int32_t keyCode) override;
    virtual bool checkInjectEventsPermissionNonReentrant(int32_t injectorPid,
                                                         int32_t injectorUid) override;
    virtual void onPointerDownOutsideFocus(const sp<IBinder>& touchedToken) override;
@@ -1166,9 +1166,9 @@ bool NativeInputManager::dispatchUnhandledKey(const sp<IBinder>& token,
    return result;
}

void NativeInputManager::pokeUserActivity(nsecs_t eventTime, int32_t eventType) {
void NativeInputManager::pokeUserActivity(nsecs_t eventTime, int32_t eventType, int32_t keyCode) {
    ATRACE_CALL();
    android_server_PowerManagerService_userActivity(eventTime, eventType);
    android_server_PowerManagerService_userActivity(eventTime, eventType, keyCode);
}


+9 −2
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#include <utils/misc.h>
#include <utils/String8.h>
#include <utils/Log.h>
#include <android/keycodes.h>

#include "com_android_server_power_PowerManagerService.h"

@@ -350,7 +351,8 @@ static void sendPowerHint(PowerHint hintId, uint32_t data) {
    SurfaceComposerClient::notifyPowerHint(static_cast<int32_t>(hintId));
}

void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t eventType) {
void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t eventType,
        int32_t keyCode) {
    if (gPowerManagerServiceObj) {
        // Throttle calls into user activity by event type.
        // We're a little conservative about argument checking here in case the caller
@@ -372,9 +374,14 @@ void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t

        JNIEnv* env = AndroidRuntime::getJNIEnv();

        int flags = 0;
        if (keyCode == AKEYCODE_VOLUME_UP || keyCode == AKEYCODE_VOLUME_DOWN) {
            flags |= USER_ACTIVITY_FLAG_NO_BUTTON_LIGHTS;
        }

        env->CallVoidMethod(gPowerManagerServiceObj,
                gPowerManagerServiceClassInfo.userActivityFromNative,
                nanoseconds_to_milliseconds(eventTime), eventType, 0);
                nanoseconds_to_milliseconds(eventTime), eventType, flags);
        checkAndClearExceptionFromCallback(env, "userActivityFromNative");
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -24,7 +24,8 @@

namespace android {

extern void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t eventType);
extern void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t eventType,
        int32_t keyCode);

} // namespace android