20de3d68d46c9151c1938a6c65a5c89e29759ab7
1 package com
.owncloud
.android
.utils
;
4 import java
.util
.ArrayList
;
6 import java
.util
.Stack
;
8 import android
.os
.FileObserver
;
10 public class RecursiveFileObserver
extends FileObserver
{
12 public static int CHANGES_ONLY
= CLOSE_WRITE
| MOVE_SELF
| MOVED_FROM
;
14 List
<SingleFileObserver
> mObservers
;
18 public RecursiveFileObserver(String path
) {
19 this(path
, ALL_EVENTS
);
22 public RecursiveFileObserver(String path
, int mask
) {
29 public void startWatching() {
30 if (mObservers
!= null
) return;
31 mObservers
= new ArrayList
<SingleFileObserver
>();
32 Stack
<String
> stack
= new Stack
<String
>();
35 while (!stack
.empty()) {
36 String parent
= stack
.pop();
37 mObservers
.add(new SingleFileObserver(parent
, mMask
));
38 File path
= new File(parent
);
39 File
[] files
= path
.listFiles();
40 if (files
== null
) continue;
41 for (int i
= 0; i
< files
.length
; ++i
) {
42 if (files
[i
].isDirectory() && !files
[i
].getName().equals(".")
43 && !files
[i
].getName().equals("..")) {
44 stack
.push(files
[i
].getPath());
48 for (int i
= 0; i
< mObservers
.size(); i
++)
49 mObservers
.get(i
).startWatching();
53 public void stopWatching() {
54 if (mObservers
== null
) return;
56 for (int i
= 0; i
< mObservers
.size(); ++i
)
57 mObservers
.get(i
).stopWatching();
64 public void onEvent(int event
, String path
) {
68 private class SingleFileObserver
extends FileObserver
{
71 public SingleFileObserver(String path
, int mask
) {
77 public void onEvent(int event
, String path
) {
78 String newPath
= mPath
+ "/" + path
;
79 RecursiveFileObserver
.this.onEvent(event
, newPath
);