package uk.co.martinpearman.b4a.fileobserver;
import android.os.FileObserver;
import android.util.Log;
import anywheresoftware.b4a.BA;
public class B4AFileObserver extends FileObserver {
// keep a reference to the parent wrapper instance so it can be used in raiseEventFromDifferentThread
// the parent wrapper instance will be the B4A Sub's Sender object
final private B4AFileObserverWrapper mB4AFileObserverWrapper;
final private BA mBA;
final private String mEventName;
// these 2 constructors allow the parent wrapper instance to pass a reference to itself and the BA object to this class
public B4AFileObserver(BA pBA, B4AFileObserverWrapper pB4AFileObserverWrapper, String pEventName, String pPath) {
super(pPath);
mB4AFileObserverWrapper = pB4AFileObserverWrapper;
mBA = pBA;
mEventName = pEventName;
}
public B4AFileObserver(BA pBA, B4AFileObserverWrapper pB4AFileObserverWrapper, String pEventName, String pPath, int pMask) {
super(pPath, pMask);
mB4AFileObserverWrapper = pB4AFileObserverWrapper;
mBA = pBA;
mEventName = pEventName;
}
@Override
public void onEvent(int pEventType, String pPath) {
// eventTypes are all the possible EventTypes
int[] eventTypes = { FileObserver.ACCESS, FileObserver.ATTRIB, FileObserver.CLOSE_NOWRITE, FileObserver.CLOSE_WRITE, FileObserver.CREATE,
FileObserver.DELETE, FileObserver.DELETE_SELF, FileObserver.MODIFY, FileObserver.MOVE_SELF, FileObserver.MOVED_FROM, FileObserver.MOVED_TO,
FileObserver.OPEN };
// use -1 as a flag so an unrecognised pEventType can be detected
int thisEventType = -1;
int i = eventTypes.length;
while (i-- > 0) {
if ((eventTypes[i] & pEventType) != 0) {
thisEventType = eventTypes[i];
break;
}
}
if (thisEventType != -1) {
Log.d("B4A", "Raising event '"+mEventName+"', eventType="+thisEventType+", path="+pPath);
final Object[] eventParameters = { thisEventType, pPath };
mBA.raiseEventFromDifferentThread(mB4AFileObserverWrapper, null, 0, mEventName, false, eventParameters);
} else {
// this condition should never be met but...!
Log.i("B4A", "FileObserver EventType not recognised, EventType=" + pEventType+", Path="+pPath);
}
}
}