diff options
author | Christian Schneppe <christian@pix-art.de> | 2016-07-29 19:52:37 +0200 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2016-07-29 19:52:37 +0200 |
commit | 94933e21cd08c53a23e5ec6c12bc1dc383b1f3ce (patch) | |
tree | 4fa096547d0917f603252c9a279e4208ba4ef711 /src/main/java/de/pixart/messenger/utils/ConversationsFileObserver.java | |
parent | 50889004f3c679387d95ba9c49a53a8f882ba33c (diff) |
changed package id inside manifest and project
Diffstat (limited to 'src/main/java/de/pixart/messenger/utils/ConversationsFileObserver.java')
-rw-r--r-- | src/main/java/de/pixart/messenger/utils/ConversationsFileObserver.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/main/java/de/pixart/messenger/utils/ConversationsFileObserver.java b/src/main/java/de/pixart/messenger/utils/ConversationsFileObserver.java new file mode 100644 index 000000000..44cdc5100 --- /dev/null +++ b/src/main/java/de/pixart/messenger/utils/ConversationsFileObserver.java @@ -0,0 +1,72 @@ +package de.pixart.messenger.utils; + + +import android.os.FileObserver; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; + +/** + * Copyright (C) 2012 Bartek Przybylski + * Copyright (C) 2015 ownCloud Inc. + * Copyright (C) 2016 Daniel Gultsch + */ + +public abstract class ConversationsFileObserver { + + private final String path; + private final List<SingleFileObserver> mObservers = new ArrayList<>(); + + public ConversationsFileObserver(String path) { + this.path = path; + } + + public synchronized void startWatching() { + Stack<String> stack = new Stack<>(); + stack.push(path); + + while (!stack.empty()) { + String parent = stack.pop(); + mObservers.add(new SingleFileObserver(parent, FileObserver.DELETE)); + final File path = new File(parent); + final File[] files = path.listFiles(); + if (files == null) { + continue; + } + for(File file : files) { + if (file.isDirectory() && !file.getName().equals(".") && !file.getName().equals("..")) { + stack.push(file.getPath()); + } + } + } + for(FileObserver observer : mObservers) { + observer.startWatching(); + } + } + + public synchronized void stopWatching() { + for(FileObserver observer : mObservers) { + observer.stopWatching(); + } + mObservers.clear(); + } + + abstract public void onEvent(int event, String path); + + private class SingleFileObserver extends FileObserver { + private final String path; + + public SingleFileObserver(String path, int mask) { + super(path, mask); + this.path = path; + } + + @Override + public void onEvent(int event, String filename) { + ConversationsFileObserver.this.onEvent(event, path+'/'+filename); + } + + } +} |