|
@@ -2,6 +2,7 @@ package com.owncloud.android.services.observer;
|
|
|
|
|
|
import android.app.Service;
|
|
import android.app.Service;
|
|
import android.content.Intent;
|
|
import android.content.Intent;
|
|
|
|
+import android.os.Binder;
|
|
import android.os.IBinder;
|
|
import android.os.IBinder;
|
|
|
|
|
|
import com.owncloud.android.MainApp;
|
|
import com.owncloud.android.MainApp;
|
|
@@ -9,13 +10,13 @@ import com.owncloud.android.datamodel.SyncedFolder;
|
|
import com.owncloud.android.datamodel.SyncedFolderProvider;
|
|
import com.owncloud.android.datamodel.SyncedFolderProvider;
|
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.List;
|
|
|
|
|
|
+import java.util.HashMap;
|
|
|
|
|
|
public class SyncedFolderObserverService extends Service {
|
|
public class SyncedFolderObserverService extends Service {
|
|
private static final String TAG = "SyncedFolderObserverService";
|
|
private static final String TAG = "SyncedFolderObserverService";
|
|
private SyncedFolderProvider mProvider;
|
|
private SyncedFolderProvider mProvider;
|
|
- private List<SyncedFolderObserver> syncedFolderObservers = new ArrayList<>();
|
|
|
|
|
|
+ private HashMap<String, SyncedFolderObserver> syncedFolderMap = new HashMap<>();
|
|
|
|
+ private final IBinder mBinder = new SyncedFolderObserverBinder();
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void onCreate() {
|
|
public void onCreate() {
|
|
@@ -26,10 +27,11 @@ public class SyncedFolderObserverService extends Service {
|
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
|
Log_OC.d(TAG, "start");
|
|
Log_OC.d(TAG, "start");
|
|
for (SyncedFolder syncedFolder : mProvider.getSyncedFolders()) {
|
|
for (SyncedFolder syncedFolder : mProvider.getSyncedFolders()) {
|
|
- SyncedFolderObserver observer = new SyncedFolderObserver(syncedFolder);
|
|
|
|
-
|
|
|
|
- observer.startWatching();
|
|
|
|
- syncedFolderObservers.add(observer);
|
|
|
|
|
|
+ if (syncedFolder.isEnabled()) {
|
|
|
|
+ SyncedFolderObserver observer = new SyncedFolderObserver(syncedFolder);
|
|
|
|
+ observer.startWatching();
|
|
|
|
+ syncedFolderMap.put(syncedFolder.getLocalPath(), observer);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return Service.START_NOT_STICKY;
|
|
return Service.START_NOT_STICKY;
|
|
@@ -37,14 +39,45 @@ public class SyncedFolderObserverService extends Service {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void onDestroy() {
|
|
public void onDestroy() {
|
|
- for (SyncedFolderObserver observer : syncedFolderObservers) {
|
|
|
|
|
|
+ for (SyncedFolderObserver observer : syncedFolderMap.values()) {
|
|
observer.stopWatching();
|
|
observer.stopWatching();
|
|
- syncedFolderObservers.remove(observer);
|
|
|
|
|
|
+ syncedFolderMap.remove(observer);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Restart oberver if it is enabled
|
|
|
|
+ * If syncedFolder exists already, use it, otherwise create new observer
|
|
|
|
+ * @param syncedFolder
|
|
|
|
+ */
|
|
|
|
+ public void restartObserver(SyncedFolder syncedFolder){
|
|
|
|
+ if (syncedFolderMap.containsKey(syncedFolder.getLocalPath())) {
|
|
|
|
+ Log_OC.d(TAG, "stop observer: " + syncedFolder.getLocalPath());
|
|
|
|
+ syncedFolderMap.get(syncedFolder.getLocalPath()).stopWatching();
|
|
|
|
+ syncedFolderMap.remove(syncedFolder.getLocalPath());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (syncedFolder.isEnabled()) {
|
|
|
|
+ Log_OC.d(TAG, "start observer: " + syncedFolder.getLocalPath());
|
|
|
|
+ if (syncedFolderMap.containsKey(syncedFolder.getLocalPath())) {
|
|
|
|
+ syncedFolderMap.get(syncedFolder.getLocalPath()).startWatching();
|
|
|
|
+ } else {
|
|
|
|
+ SyncedFolderObserver observer = new SyncedFolderObserver(syncedFolder);
|
|
|
|
+ observer.startWatching();
|
|
|
|
+ syncedFolderMap.put(syncedFolder.getLocalPath(), observer);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public IBinder onBind(Intent arg0) {
|
|
public IBinder onBind(Intent arg0) {
|
|
- return null;
|
|
|
|
|
|
+ return mBinder;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ public class SyncedFolderObserverBinder extends Binder {
|
|
|
|
+ public SyncedFolderObserverService getService() {
|
|
|
|
+ return SyncedFolderObserverService.this;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|