@ -31,6 +31,7 @@ import org.apache.commons.collections4.iterators.IteratorChain;
import org.apache.commons.collections4.iterators.SingletonIterator ;
import org.apache.commons.collections4.iterators.SingletonIterator ;
import java.io.IOException ;
import java.io.IOException ;
import java.lang.ref.WeakReference ;
import java.util.HashSet ;
import java.util.HashSet ;
import java.util.Iterator ;
import java.util.Iterator ;
import java.util.LinkedHashMap ;
import java.util.LinkedHashMap ;
@ -70,7 +71,7 @@ public class DavService extends Service {
private final IBinder binder = new InfoBinder ( ) ;
private final IBinder binder = new InfoBinder ( ) ;
private final Set < Long > runningRefresh = new HashSet < > ( ) ;
private final Set < Long > runningRefresh = new HashSet < > ( ) ;
private final List < RefreshingStatusListener> refreshingStatusListeners = new LinkedList < > ( ) ;
private final List < WeakReference< RefreshingStatusListener> > refreshingStatusListeners = new LinkedList < > ( ) ;
@Override
@Override
@ -86,9 +87,12 @@ public class DavService extends Service {
case ACTION_REFRESH_COLLECTIONS :
case ACTION_REFRESH_COLLECTIONS :
if ( runningRefresh . add ( id ) ) {
if ( runningRefresh . add ( id ) ) {
new Thread ( new RefreshCollections ( id ) ) . start ( ) ;
new Thread ( new RefreshCollections ( id ) ) . start ( ) ;
for ( RefreshingStatusListener listener : refreshingStatusListeners )
for ( WeakReference < RefreshingStatusListener > ref : refreshingStatusListeners ) {
RefreshingStatusListener listener = ref . get ( ) ;
if ( listener ! = null )
listener . onDavRefreshStatusChanged ( id , true ) ;
listener . onDavRefreshStatusChanged ( id , true ) ;
}
}
}
break ;
break ;
}
}
}
}
@ -115,15 +119,19 @@ public class DavService extends Service {
return runningRefresh . contains ( id ) ;
return runningRefresh . contains ( id ) ;
}
}
public void addRefreshingStatusListener ( RefreshingStatusListener listener , boolean callImmediate ) {
public void addRefreshingStatusListener ( @NonNull RefreshingStatusListener listener , boolean callImmediate ) {
refreshingStatusListeners . add ( listener ) ;
refreshingStatusListeners . add ( new WeakReference < > ( listener ) ) ;
if ( callImmediate )
if ( callImmediate )
for ( long id : runningRefresh )
for ( long id : runningRefresh )
listener . onDavRefreshStatusChanged ( id , true ) ;
listener . onDavRefreshStatusChanged ( id , true ) ;
}
}
public void removeRefreshingStatusListener ( RefreshingStatusListener listener ) {
public void removeRefreshingStatusListener ( @NonNull RefreshingStatusListener listener ) {
refreshingStatusListeners . remove ( listener ) ;
for ( Iterator < WeakReference < RefreshingStatusListener > > iterator = refreshingStatusListeners . iterator ( ) ; iterator . hasNext ( ) ; ) {
RefreshingStatusListener item = iterator . next ( ) . get ( ) ;
if ( listener . equals ( item ) )
iterator . remove ( ) ;
}
}
}
}
}
@ -314,10 +322,13 @@ public class DavService extends Service {
dbHelper . close ( ) ;
dbHelper . close ( ) ;
runningRefresh . remove ( service ) ;
runningRefresh . remove ( service ) ;
for ( RefreshingStatusListener listener : refreshingStatusListeners )
for ( WeakReference < RefreshingStatusListener > ref : refreshingStatusListeners ) {
RefreshingStatusListener listener = ref . get ( ) ;
if ( listener ! = null )
listener . onDavRefreshStatusChanged ( service , false ) ;
listener . onDavRefreshStatusChanged ( service , false ) ;
}
}
}
}
}
/ * *
/ * *
* Checks if the given URL defines home sets and adds them to the home set list .
* Checks if the given URL defines home sets and adds them to the home set list .