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

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

Merge branch '227-o-extract-quota-checking' into 'v1-oreo'

add base for workRequest to check quota regularly

See merge request !115
parents a40be6fa 044f4d85
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -56,6 +56,10 @@ android {
    buildFeatures {
        viewBinding true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}

+52 −123
Original line number Diff line number Diff line
@@ -8,6 +8,12 @@

package foundation.e.drive.activity;

import static foundation.e.drive.utils.AppConstants.ACCOUNT_DATA_ALIAS_KEY;
import static foundation.e.drive.utils.AppConstants.ACCOUNT_DATA_EMAIL;
import static foundation.e.drive.utils.AppConstants.ACCOUNT_DATA_GROUPS;
import static foundation.e.drive.utils.AppConstants.ACCOUNT_DATA_NAME;
import static foundation.e.drive.utils.AppConstants.ACCOUNT_DATA_TOTAL_QUOTA_KEY;
import static foundation.e.drive.utils.AppConstants.ACCOUNT_DATA_USED_QUOTA_KEY;
import static foundation.e.drive.widgets.EDriveWidget.buildIntent;
import static foundation.e.drive.widgets.EDriveWidget.convertIntoMB;
import static foundation.e.drive.widgets.EDriveWidget.dataForWeb;
@@ -18,8 +24,6 @@ import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;
@@ -27,32 +31,18 @@ import androidx.core.content.ContextCompat;

import com.bumptech.glide.Glide;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.UserInfo;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.resources.users.GetRemoteUserInfoOperation;

import java.util.ArrayList;

import foundation.e.drive.R;
import foundation.e.drive.databinding.ActivityAccountsBinding;
import foundation.e.drive.operations.GetAliasOperation;
import foundation.e.drive.utils.CommonUtils;
import foundation.e.drive.widgets.EDriveNetworkCallback;
import foundation.e.drive.widgets.EDriveWidget;

public class AccountsActivity extends AppCompatActivity {

    private static final String NON_OFFICIAL_AVATAR_PATH = "/index.php/avatar/";
    public static final String NON_OFFICIAL_AVATAR_PATH = "/index.php/avatar/";
    private static final String ACCOUNT_SETTINGS =
            EDriveWidget.ACCOUNT_MANAGER_PACKAGE_NAME + ".ui.AccountsActivity";

    private final GetRemoteUserInfoOperation getRemoteUserInfoOperation = new GetRemoteUserInfoOperation();
    private final GetAliasOperation getAliasOperation = new GetAliasOperation();
    private UserInfo userInfo = null;
    private ArrayList<Object> aliases;
    private OwnCloudClient client;
    private Account account;

    private ActivityAccountsBinding binding;

    @Override
@@ -63,130 +53,76 @@ public class AccountsActivity extends AppCompatActivity {
        setContentView(binding.getRoot());
        setSupportActionBar(binding.toolbar);

        binding.toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
        binding.toolbar.setNavigationOnClickListener(v -> onBackPressed());

        binding.settings.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
        binding.settings.setOnClickListener(v -> {
            final Intent settingsIntent = buildIntent(Intent.ACTION_VIEW, "")
                    .setComponent(new ComponentName(
                            EDriveWidget.ACCOUNT_MANAGER_PACKAGE_NAME, ACCOUNT_SETTINGS));
            startActivity(settingsIntent);
            }
        });
        showDetails();
    }

    private void showDetails() {
        final AccountManager accountManager = AccountManager.get(this);
        account = CommonUtils.getAccount(getString(R.string.eelo_account_type),
        final Account account = CommonUtils.getAccount(getString(R.string.eelo_account_type),
                accountManager);
        client = CommonUtils.getOwnCloudClient(account, this);
        final OwnCloudClient client = CommonUtils.getOwnCloudClient(account, this);

        final HandlerThread handlerThread = new HandlerThread("Network Request");
        handlerThread.start();
        final Handler mHandler = new Handler(handlerThread.getLooper());

        final EDriveNetworkCallback callback = new EDriveNetworkCallback() {
            @Override
            public void onComplete() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        onNetworkRequestCompleted();
                    }
                });
            }
        };
        final String usedQuota = accountManager.getUserData(account, ACCOUNT_DATA_USED_QUOTA_KEY);
        final String totalQuota = accountManager.getUserData(account, ACCOUNT_DATA_TOTAL_QUOTA_KEY);
        final String email = accountManager.getUserData(account, ACCOUNT_DATA_EMAIL);

        if (!CommonUtils.haveNetworkConnection(this, true)) {
            handleNoInternetConnection();
            return;
        }
        binding.name.setText(accountManager.getUserData(account, ACCOUNT_DATA_NAME));
        binding.email.setText(email);

        binding.loading.setVisibility(View.VISIBLE);
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                if (client != null) {
                    RemoteOperationResult ocsResult = getRemoteUserInfoOperation.execute(client);
                    if (ocsResult.isSuccess() && ocsResult.getData() != null) {
                        userInfo = (UserInfo) ocsResult.getData().get(0);
                    }
                    RemoteOperationResult aliasResult = getAliasOperation.execute(client);
                    if (aliasResult.isSuccess() && aliasResult.getData() != null) {
                        aliases = aliasResult.getData();
                    }
                }
                callback.onComplete();
            }
        });
    }

    private void onNetworkRequestCompleted() {
        binding.loading.setVisibility(View.GONE);
        if (userInfo.displayName == null) {
            binding.name.setText(userInfo.alternateDisplayName);
        } else {
            binding.name.setText(userInfo.displayName);
        }
        binding.email.setText(userInfo.id);

        final int usedMB = convertIntoMB(userInfo.quota.used);
        final int totalMB = convertIntoMB(userInfo.quota.total);

        binding.progress.setMax(totalMB);
        binding.progress.setProgress(usedMB);
        binding.progress.setMax(convertIntoMB(totalQuota));
        binding.progress.setProgress(convertIntoMB(usedQuota));
        binding.progress.setVisibility(View.VISIBLE);

        binding.plan.setText(getString(R.string.free_plan,
                CommonUtils.humanReadableByteCountBin(userInfo.quota.total)));
        for (String group : userInfo.groups) {
                CommonUtils.humanReadableByteCountBin(Long.parseLong(totalQuota))));

        String[] groups = accountManager.getUserData(account, ACCOUNT_DATA_GROUPS).split(",");
        for (String group : groups) {
            if (group.contains("premium-")) {
                binding.plan.setText(getString(R.string.premium_plan, group.split("-")[1]));
                binding.plan.setText(getString(R.string.premium_plan,
                        group.split("-")[1]));
                break;
            }
        }

        binding.myPlan.setVisibility(View.VISIBLE);
        binding.plan.setVisibility(View.VISIBLE);

        binding.status.setText(getString(R.string.progress_status,
                CommonUtils.humanReadableByteCountBin(userInfo.quota.used),
                CommonUtils.humanReadableByteCountBin(userInfo.quota.total)));
                CommonUtils.humanReadableByteCountBin(Long.parseLong(usedQuota)),
                CommonUtils.humanReadableByteCountBin(Long.parseLong(totalQuota))));

        String aliases = accountManager.getUserData(account, ACCOUNT_DATA_ALIAS_KEY);
        if (aliases != null && !aliases.isEmpty()) {
            binding.alias.setVisibility(View.VISIBLE);
            binding.alias1.setText(aliases.get(0).toString());
            binding.alias1.setText(aliases.split(",")[0]);
            binding.aliasDivider.setVisibility(View.VISIBLE);
        } else {
            binding.alias.setVisibility(View.GONE);
            binding.alias1Container.setVisibility(View.GONE);
        }

        binding.alias1Clipboard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
        binding.alias1Clipboard.setOnClickListener(v ->
                CommonUtils.copyToClipboard(Uri.parse(binding.alias1.getText().toString()),
                        v.getContext(), v.getContext().getString(R.string.alias));
            }
        });
                        v.getContext(), v.getContext().getString(R.string.alias)));

        binding.upgrade.setVisibility(View.VISIBLE);
        binding.upgrade.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
        binding.upgrade.setOnClickListener(v -> {
            final Intent upgradeIntent = buildIntent(Intent.ACTION_VIEW,
                        String.format(EDriveWidget.WEBPAGE, userInfo.id,
                                dataForWeb(userInfo.quota.total)));
                    String.format(EDriveWidget.WEBPAGE, email,
                            dataForWeb(Long.parseLong(totalQuota))));
            startActivity(upgradeIntent);
            }
        });

        binding.alias.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
        binding.alias.setOnClickListener(v -> {
            if (binding.alias1Container.getVisibility() == View.VISIBLE) {
                binding.alias1Container.setVisibility(View.GONE);
                binding.alias.setCompoundDrawablesWithIntrinsicBounds(null, null,
@@ -196,7 +132,6 @@ public class AccountsActivity extends AppCompatActivity {
                binding.alias.setCompoundDrawablesWithIntrinsicBounds(null, null,
                        ContextCompat.getDrawable(v.getContext(), R.drawable.ic_expand_less), null);
            }
            }
        });

        Glide.with(this)
@@ -206,10 +141,4 @@ public class AccountsActivity extends AppCompatActivity {
                .into(binding.avatar);
        binding.avatar.setVisibility(View.VISIBLE);
    }

    private void handleNoInternetConnection() {
        binding.name.setText(account.name);
        binding.email.setText(account.type);
        binding.avatar.setVisibility(View.VISIBLE);
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -100,6 +100,8 @@ public class InitializerService extends Service {
            return;
        }

        CommonUtils.registerPeriodicUserInfoChecking(WorkManager.getInstance(this));

        final List<String> syncCategories = new ArrayList<>();

        syncCategories.addAll(Arrays.asList(MEDIA_SYNCABLE_CATEGORIES));
+0 −28
Original line number Diff line number Diff line
@@ -158,13 +158,6 @@ public class SynchronizationService extends Service implements OnRemoteOperation
            if (callerOperation instanceof UploadFileOperation && callerOperationResultData != null
                && callerOperationResultData.size() > 1) {
                final Float relativeQuota = (Float) result.getData().get(1);
                if (relativeQuota >= 99.0) {
                    addNotification(getString(R.string.notif_quota_99Plus_title), getString(R.string.notif_quota_99Plus_text));
                } else if (relativeQuota >= 90.0) {
                    addNotification(getString(R.string.notif_quota_80plus_title), getString(R.string.notif_quota_90Plus_text));
                } else if (relativeQuota >= 80.0) {
                    addNotification(getString(R.string.notif_quota_80plus_title), getString(R.string.notif_quota_80Plus_text));
                }
            }
            switch (result.getCode()) {
                case OK:
@@ -204,7 +197,6 @@ public class SynchronizationService extends Service implements OnRemoteOperation
                case QUOTA_EXCEEDED:
                    //Case specific to UploadFileOperation
                    Log.w(TAG, "Quota_EXCEEDED");
                    addNotification(getString(R.string.notif_quota_99Plus_title), getString(R.string.notif_quota_execeeded_text));
                    break;
                case FILE_NOT_FOUND:
                    //Case specific to DownloadFileOperation
@@ -237,26 +229,6 @@ public class SynchronizationService extends Service implements OnRemoteOperation
        return operation;
    }

    /**
     *  send notification to inform user that he lacks space on ecloud
     * Improvement idea:
     * - add translatable message & title
     * - make message & title to be a parameter of the method, so we could reuse the function somewhere
     * - else with different notification. File conflict for example.
     **/
    private void addNotification(String title, String text){
        final NotificationCompat.Builder builder =
                new NotificationCompat.Builder(this, AppConstants.notificationChannelID)
                        .setSmallIcon(android.R.drawable.stat_sys_warning)
                        .setContentTitle(title)
                        .setContentText(text)
                        .setStyle(new NotificationCompat.BigTextStyle().bigText(text));
        // Add as notification
        final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.notify(0, builder.build());
    }



    /**
     * Handler for the class
+17 −9
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@
package foundation.e.drive.utils;

import android.os.Build;
import foundation.e.drive.BuildConfig;

import java.text.SimpleDateFormat;
import java.util.Locale;
@@ -31,6 +30,14 @@ public abstract class AppConstants {
    public static final String SHARED_PREFERENCE_NAME = "preferences";
    public static final String KEY_LAST_SYNC_TIME = "lastSyncTimestamp";

    public static final String ACCOUNT_DATA_NAME = "display_name";
    public static final String ACCOUNT_DATA_USED_QUOTA_KEY = "used_quota";
    public static final String ACCOUNT_DATA_TOTAL_QUOTA_KEY = "total_quota";
    public static final String ACCOUNT_DATA_RELATIVE_QUOTA_KEY = "relative_quota";
    public static final String ACCOUNT_DATA_GROUPS = "group";
    public static final String ACCOUNT_DATA_ALIAS_KEY = "alias";
    public static final String ACCOUNT_DATA_EMAIL = "email";

    public static final String[] MEDIA_SYNCABLE_CATEGORIES = new String[]{"Images", "Movies", "Music", "Ringtones", "Documents", "Podcasts"};
    public static final String[] SETTINGS_SYNCABLE_CATEGORIES = new String[]{"Rom settings"};

@@ -41,6 +48,7 @@ public abstract class AppConstants {

    /**
     * Get a readable OS's build date String
     *
     * @return Os'build date
     */
    private static String getBuildTime() {
Loading