Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9bea523 authored by Vincent Bourgmayer's avatar Vincent Bourgmayer
Browse files

Trigger FileObserver from EDriveApplication instead of FileObserverService

- Remove FileObserverService because useless
- Add "StartRecursiveFileObserver()" and "StopRecursiveFileObserver()" method in EDriveApplication. To allow services to stop/start the FileObserver.
- Replace intent for FileObserverService by call in InitializerService by EDriveApplication.startRecursiveFileObserver()"
- Add a call to EdriveApplication.StopRecursiveFileObserver() method in ResetService
- Remove FileObserverService entry in AndroidManifest.xml
- Add a "watching" boolean field in RecursiveFileObserver and "isWatching()" public method
parent dba13166
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -53,14 +53,6 @@ http://www.gnu.org/licenses/gpl.html
                <action android:name="drive.services.InitializerService" />
            </intent-filter>
        </service>
        <service
            android:name=".services.FileObserverService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="drive.services.FileObserverService" />
            </intent-filter>
        </service>
        <service
            android:name=".services.ResetService"
            android:enabled="true"
+29 −0
Original line number Diff line number Diff line
@@ -13,8 +13,11 @@ import android.accounts.AccountManager;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Environment;
import android.util.Log;

import foundation.e.drive.FileObservers.FileEventListener;
import foundation.e.drive.FileObservers.RecursiveFileObserver;
import foundation.e.drive.utils.AppConstants;
import foundation.e.drive.utils.CommonUtils;

@@ -25,6 +28,8 @@ import foundation.e.drive.utils.CommonUtils;
public class EdriveApplication extends Application {

    private static final String TAG = "EdriveApplication";
    private RecursiveFileObserver mFileObserver = null;


    @Override
    public void onCreate() {
@@ -33,9 +38,14 @@ public class EdriveApplication extends Application {
        Log.i(TAG, "Starting");
        resetOperationManagerSetting();

        final String pathForObserver = Environment.getExternalStorageDirectory().getAbsolutePath();
        mFileObserver = new RecursiveFileObserver(getApplicationContext(), pathForObserver, new FileEventListener());

        SharedPreferences prefs = getSharedPreferences(AppConstants.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);

        if (prefs.getString(AccountManager.KEY_ACCOUNT_NAME, null) != null) {
            Log.d(TAG, "Account already registered");
            startRecursiveFileObserver();
        } else {
            Account mAccount = CommonUtils.getAccount(getString(R.string.eelo_account_type), AccountManager.get(this));
            if (mAccount != null) {
@@ -56,6 +66,25 @@ public class EdriveApplication extends Application {
                .apply();
    }


    /**
     * Start Recursive FileObserver if not already watching
     */
    public void startRecursiveFileObserver(){
        if (!mFileObserver.isWatching()) {
            mFileObserver.startWatching();
            Log.d(TAG, "Starting RecursiveFileObserver on media's root folder");
        }
        else {
            Log.w(TAG, "RecursiveFileObserver (for media's root folder) was already running");
        }
    }

    public void stopRecursiveFileObserver(){
        mFileObserver.stopWatching();
        Log.d(TAG, "RecursiveFileObserver on media's root folder stops watching ");
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
+8 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ public class RecursiveFileObserver extends FileObserver {
        }
    };


    private boolean watching = false;
    private final Context applicationContext;
    private String mPath;
    private int mMask;
@@ -80,6 +80,7 @@ public class RecursiveFileObserver extends FileObserver {
                stack.push(syncedFolder.getLocalFolder());
                stack.push(syncedFolder.getRemoteFolder());
            }
            watching = true;
        }

        // Recursively watch all child directories
@@ -95,6 +96,7 @@ public class RecursiveFileObserver extends FileObserver {
                }
            }
        }

    }

    /**
@@ -119,6 +121,7 @@ public class RecursiveFileObserver extends FileObserver {
            observer.stopWatching();
        }
        mObservers.clear();
        watching = false;
    }

    /**
@@ -134,6 +137,10 @@ public class RecursiveFileObserver extends FileObserver {
        }
    }

    public boolean isWatching(){
        return watching;
    }

    private class SingleFileObserver extends FileObserver {
        private String filePath;

+0 −46
Original line number Diff line number Diff line
package foundation.e.drive.services;

import android.app.Service;
import android.content.Intent;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;

import androidx.annotation.Nullable;

import java.io.File;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

import foundation.e.drive.FileObservers.FileEventListener;
import foundation.e.drive.FileObservers.RecursiveFileObserver;

public class FileObserverService extends Service {
    private final static String TAG = FileObserverService.class.getSimpleName();
    private RecursiveFileObserver mFileObserver = null;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "started");
        super.onStartCommand(intent, flags, startId);

        String path = Environment.getExternalStorageDirectory().getAbsolutePath();
        Log.d(TAG, "Added RecursiveFileObserver on root :"+path);


        mFileObserver = new RecursiveFileObserver(getApplicationContext(), path, new FileEventListener());

        mFileObserver.startWatching();
        return START_STICKY;
    }





    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
+5 −2
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import foundation.e.drive.EdriveApplication;
import foundation.e.drive.models.SyncedFolder;
import foundation.e.drive.operations.CreateInitialFolderRemoteOperation;
import foundation.e.drive.utils.AppConstants;
@@ -280,8 +281,10 @@ public class InitializerService extends Service implements OnRemoteOperationList
        CommonUtils.registerPeriodicFullScanWorker(WorkManager.getInstance(appContext));

        //all folder have been created
        Intent FileObserverService = new Intent(getApplicationContext(), foundation.e.drive.services.FileObserverService.class);
        startService(FileObserverService);
        ((EdriveApplication) this.getApplication() ).startRecursiveFileObserver();

        //Intent FileObserverService = new Intent(getApplicationContext(), foundation.e.drive.services.FileObserverService.class);
        //startService(FileObserverService);

        //Immediatly start ObserverService to not have to wait 30 minutes.
        Intent observersServiceIntent = new Intent(getApplicationContext(), foundation.e.drive.services.ObserverService.class);
Loading