package org.itsnat.droid.impl.browser.serveritsnat.event;
import android.os.Parcel;
import android.view.InputEvent;
import org.itsnat.droid.event.DroidInputEvent;
import org.itsnat.droid.impl.browser.serveritsnat.evtlistener.DroidEventListener;
/**
* Created by jmarranz on 7/07/14.
*/
public abstract class DroidInputEventImpl extends DroidEventImpl implements DroidInputEvent
{
protected InputEvent evtNative;
public DroidInputEventImpl(DroidEventListener listener, InputEvent evtNative)
{
super(listener);
this.evtNative = evtNative;
}
public InputEvent getInputEvent()
{
return evtNative;
}
@Override
public void saveEvent()
{
// Para evitar el problema de acceder en modo ASYNC_HOLD al evento original tras haberse encolado y terminado el proceso del evento por el navegador
// En Android lo normal es reutilizar el objeto evento para siguientes eventos por ello tenemos que hacer una copia
if (evtNative == null) return;
// http://stackoverflow.com/questions/1626667/how-to-use-parcel-in-android
Parcel parcelOut = Parcel.obtain();
parcelOut.writeValue(evtNative);
byte[] data = parcelOut.marshall();
parcelOut.recycle();
Parcel parcelIn = Parcel.obtain();
parcelIn.unmarshall(data, 0, data.length);
parcelIn.setDataPosition(0);
this.evtNative = (InputEvent) parcelIn.readValue(evtNative.getClass().getClassLoader());
parcelIn.recycle();
}
}