blob: 259cca8c01e28023c4eb075eb0ab3462e702ecf6 [file] [log] [blame]
/**
* 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.
*/
package com.android.systemui.shared.system;
import android.graphics.Matrix;
import android.os.Looper;
import android.view.BatchedInputEventReceiver;
import android.view.Choreographer;
import android.view.InputChannel;
import android.view.InputEvent;
import android.view.MotionEvent;
/**
* @see android.view.InputChannel
*/
public class InputChannelCompat {
/**
* Callback for receiving event callbacks
*/
public interface InputEventListener {
/**
* @param ev event to be handled
*/
void onInputEvent(InputEvent ev);
}
/**
* Version of addBatch method which preserves time accuracy in nanoseconds instead of
* converting the time to milliseconds.
* @param src old MotionEvent where the target should be appended
* @param target new MotionEvent which should be added to the src
* @return true if the merge was successful
*
* @see MotionEvent#addBatch(MotionEvent)
*/
public static boolean mergeMotionEvent(MotionEvent src, MotionEvent target) {
return target.addBatch(src);
}
/** @see MotionEvent#createRotateMatrix */
public static Matrix createRotationMatrix(
/*@Surface.Rotation*/ int rotation, int displayW, int displayH) {
return MotionEvent.createRotateMatrix(rotation, displayW, displayH);
}
/**
* @see BatchedInputEventReceiver
*/
public static class InputEventReceiver {
private final BatchedInputEventReceiver mReceiver;
public InputEventReceiver(InputChannel inputChannel, Looper looper,
Choreographer choreographer, final InputEventListener listener) {
mReceiver = new BatchedInputEventReceiver(inputChannel, looper, choreographer) {
@Override
public void onInputEvent(InputEvent event) {
listener.onInputEvent(event);
finishInputEvent(event, true /* handled */);
}
};
}
/**
* @see BatchedInputEventReceiver#setBatchingEnabled()
*/
public void setBatchingEnabled(boolean batchingEnabled) {
mReceiver.setBatchingEnabled(batchingEnabled);
}
/**
* @see BatchedInputEventReceiver#dispose()
*/
public void dispose() {
mReceiver.dispose();
}
}
}