X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/e7ed69aeed9ccf51a30a94a50501efc167d53cdf..ba148a82782bba94b95b8acd2ecb19af797fa84a:/src/com/owncloud/android/utils/RecursiveFileObserver.java?ds=sidebyside diff --git a/src/com/owncloud/android/utils/RecursiveFileObserver.java b/src/com/owncloud/android/utils/RecursiveFileObserver.java new file mode 100644 index 00000000..20de3d68 --- /dev/null +++ b/src/com/owncloud/android/utils/RecursiveFileObserver.java @@ -0,0 +1,83 @@ +package com.owncloud.android.utils; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; + +import android.os.FileObserver; + +public class RecursiveFileObserver extends FileObserver { + + public static int CHANGES_ONLY = CLOSE_WRITE | MOVE_SELF | MOVED_FROM; + + List mObservers; + String mPath; + int mMask; + + public RecursiveFileObserver(String path) { + this(path, ALL_EVENTS); + } + + public RecursiveFileObserver(String path, int mask) { + super(path, mask); + mPath = path; + mMask = mask; + } + + @Override + public void startWatching() { + if (mObservers != null) return; + mObservers = new ArrayList(); + Stack stack = new Stack(); + stack.push(mPath); + + while (!stack.empty()) { + String parent = stack.pop(); + mObservers.add(new SingleFileObserver(parent, mMask)); + File path = new File(parent); + File[] files = path.listFiles(); + if (files == null) continue; + for (int i = 0; i < files.length; ++i) { + if (files[i].isDirectory() && !files[i].getName().equals(".") + && !files[i].getName().equals("..")) { + stack.push(files[i].getPath()); + } + } + } + for (int i = 0; i < mObservers.size(); i++) + mObservers.get(i).startWatching(); + } + + @Override + public void stopWatching() { + if (mObservers == null) return; + + for (int i = 0; i < mObservers.size(); ++i) + mObservers.get(i).stopWatching(); + + mObservers.clear(); + mObservers = null; + } + + @Override + public void onEvent(int event, String path) { + + } + + private class SingleFileObserver extends FileObserver { + private String mPath; + + public SingleFileObserver(String path, int mask) { + super(path, mask); + mPath = path; + } + + @Override + public void onEvent(int event, String path) { + String newPath = mPath + "/" + path; + RecursiveFileObserver.this.onEvent(event, newPath); + } + + } +}