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

Commit 357ffca8 authored by Jonathan Klee's avatar Jonathan Klee
Browse files

Introduce EdriveApplication class

EdriveApplication is the class instantiated before any other class
in the projet.

The application is set as persitent, meaning if it gets killed,
it will be respawned by the system. The application will also
start automatically at boot so BootCompleteReceiver becomes
useless.
parent 63c1893b
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -4,6 +4,9 @@
- Vincent (vincent.bourgmayer@e.email)
- Frank

### Install

Since the application is persistent, you won't be able to reinstall the app with a regular `adb install -r` command. You will have to `pm uninstall foundation.e.drive` before reinstalling the application.

### Notes:
To disable All the synchronisation, go into your account and disable BOTH: "application settings" AND "Photos and videos"
+2 −8
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ http://www.gnu.org/licenses/gpl.html
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />

    <application
        android:name=".EdriveApplication"
        android:persistent="true"
        android:allowBackup="true"
        android:icon="@mipmap/ic_eelo"
        android:label="@string/app_name"
@@ -62,14 +64,6 @@ http://www.gnu.org/licenses/gpl.html
            android:enabled="true" />
        <service android:name=".services.OperationManagerService" />

        <!-- Receivers -->
        <receiver
            android:name=".receivers.BootCompleteReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <receiver
            android:name=".receivers.BatteryStateReceiver"
            android:enabled="true">
+67 −0
Original line number Diff line number Diff line
/*
 * Copyright © ECORP SAS 2022.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 */

package foundation.e.drive;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import foundation.e.drive.utils.AppConstants;
import foundation.e.drive.utils.CommonUtils;
import foundation.e.drive.utils.JobUtils;

/**
 * Class representing the eDrive application.
 * It is instantiated before any other class.
 */
public class EdriveApplication extends Application {

    private static final String TAG = "EdriveApplication";

    @Override
    public void onCreate() {
        super.onCreate();

        Log.i(TAG, "Starting");

        SharedPreferences prefs = getSharedPreferences(AppConstants.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
        if (prefs.getString(AccountManager.KEY_ACCOUNT_NAME, null) != null) {
            prefs.edit().putBoolean(AppConstants.KEY_OMS_IS_WORKING, false).commit();
            scheduleScannerJob();
        } else {
            Account mAccount = CommonUtils.getAccount(getString(R.string.eelo_account_type), AccountManager.get(this));
            if (mAccount != null) {
                String accountName = mAccount.name;
                String accountType = mAccount.type;

                prefs.edit().putString(AccountManager.KEY_ACCOUNT_NAME, accountName)
                        .putBoolean(AppConstants.KEY_OMS_IS_WORKING, false)
                        .putString(AccountManager.KEY_ACCOUNT_TYPE, accountType)
                        .apply();

                scheduleScannerJob();
            }
        }
    }

    private void scheduleScannerJob() {
        if (!JobUtils.isScannerJobRegistered(this)) {
            JobUtils.scheduleScannerJob(this);
        }
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        Log.w(TAG, "System is low on memory. Application might get killed by the system.");
    }
}
+0 −61
Original line number Diff line number Diff line
package foundation.e.drive.receivers;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;

import foundation.e.drive.R;
import foundation.e.drive.services.ObserverService;
import foundation.e.drive.utils.AppConstants;
import foundation.e.drive.utils.CommonUtils;
import foundation.e.drive.utils.JobUtils;


public class BootCompleteReceiver extends BroadcastReceiver {
    private final static String TAG = BootCompleteReceiver.class.getSimpleName();

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "onReceive");
        String intentAction = intent.getAction();

        if (intentAction == null) {
            Log.e(TAG, "intent Action is null");
        } else if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            SharedPreferences prefs = context.getSharedPreferences(AppConstants.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
            if (prefs.getString(AccountManager.KEY_ACCOUNT_NAME, null) != null) {
                //If user account is registered
                prefs.edit().putBoolean(AppConstants.KEY_OMS_IS_WORKING, false).commit();

                if (!JobUtils.isScannerJobRegistered(context)) {
                    //scanner job isn't registered then register it
                    JobUtils.scheduleScannerJob(context);
                }

            } else {

                Account mAccount = CommonUtils.getAccount(context.getString(R.string.eelo_account_type), AccountManager.get(context));

                if (mAccount != null) {
                    String accountName = mAccount.name;
                    String accountType = mAccount.type;

                    //If data come from intent, store them into pref because there aren't stored
                    prefs.edit().putString(AccountManager.KEY_ACCOUNT_NAME, accountName)
                            .putBoolean(AppConstants.KEY_OMS_IS_WORKING, false)
                            .putString(AccountManager.KEY_ACCOUNT_TYPE, accountType)
                            .apply();

                    if (!JobUtils.isScannerJobRegistered(context)) {
                        //scanner job isn't registered then register it
                        JobUtils.scheduleScannerJob(context);
                    }
                }
            }
        }
    }
}